Авторизация


...

Кто на сайте?

Сейчас 85 гостей и ни одного зарегистрированного пользователя на сайте

Статистика

-Посетители : 23007
-Материалы : 209

Пользователь сайта продает...

  LM393

Пользователь сайта покупает...

ПП подсчета КС путем 16-битного дополнения суммы всех 16- битных слов.

Автор: Николай Викторов Просмотров: 2278

 

 

Объем блока данных ограничивается только объемом памяти применяемого микроконтроллера. Если количество байт не четное , то последний байт добавляется самой программой и имеет нулевой значении , в результате блок данных всегда выравнивается 16 битным словом (два байта). В данной программе блок данных для подсчета располагается с адреса 0200H, который при необходимости можно изменить. Результат КС находится в регистрах  SUM_kont (L,H).

 



Cblock                   SUM_kontL              ; мл. байт КС             SUM_kontH              ; ст. байт КС             BaitL                  ; мл.  кол-во байт для подсчета КС             BaitH                  ; ст.  кол-во байт для подсчета КС             Temp_1                 ; временный регистр             Temp_2                 ; временный регистр             endc          ;*******************************************************************             org                  0 ;             goto             START ; ;---------------------------------------------------- START       movlw               .5 ; мл.  кол-во байт для подсчета КС             movwf            BaitL ;             movlw               .0 ; ст.  кол-во байт для подсчета КС             movwf            BaitH ;             call         TCP_k_sum ; считаем КС             nop                    ; результат в SUM_kont (L,H)             goto            START ;============================================================================================= ; ПП вычисление контрольной суммы ;============================================================================================= TCP_k_sum   clrf         SUM_kontH ; очистить регистр             clrf         SUM_kontL ; очистить регистр             lfsr       FSR0,0x0200 ; первый байт   в ОЗУ для подсчета             call         Prov_bain ; проверка четности байт             lfsr       FSR0,0x0200 ; первый байт   в ОЗУ для подсчета             call               D_2 ; делим на два  16 битный Bait (L,H)             tstfsz           BaitL ; = если "0" , то             bra               $+.4 ; следующую команду пропускаем =             incf             BaitL ; коррекция кол-ва байт для подсчета мл.             incf             BaitH ; коррекция кол-ва байт для подсчета ст.             movff     INDF0,Temp_1 ; копируем во временный регистр мл.байт             movf          POSTINC0 ; +1 ,следующий байт             movff     INDF0,Temp_2 ; копируем во временный регистр ст.байт             movf          Temp_1,0 ; значение регистра в W             addwfc       SUM_kontL ; складываем ст.байт с использованием флага переноса             movf          Temp_2,0 ; значение регистра в W             addwfc       SUM_kontH ; складываем мл.байт с использованием флага переноса             movlw               .0 ; = если был перенос             addwfc       SUM_kontL ; складываем со ст. байтом. =             movf          POSTINC0 ; +1, следующий байт             decfsz           BaitL ; уменьшаем мл.байт , 0 ?             bra              $-.26 ; нет , следующий байт             decfsz           BaitH ; уменьшаем ст.байт , 0 ?             bra              $-.30 ; нет , следующий байт             nop             comf         SUM_kontL ; инвертируем мл.байт(КС мл.байт)             comf         SUM_kontH ; инвертируем ст.байт(КС ст.байт)             return ;---------------------------------- Prov_bain   btfss          BaitL,0 ; проверяем , четный байт ?             return                 ; да , возврат             movf           BaitL,0 ; в W для сумму с адресом первого байта ,мл.             addwf            FSR0L ; адрес последнего байта подчета КС мл.             movf           BaitH,0 ; в W для сумму с адресом первого байта, ст.             addwfc           FSR0H ; адрес последнего байта подсчета КС ст.             clrf             INDF0 ; сбрасываем в "0"             movlw               .1 ; записываем "1" в W             addwf            BaitL ; увеличиваем значение мл.байта             movlw               .0 ; записываем "0" в W             addwfc           BaitH ; если был перенос увеличиваем значение ст.байта             return ;----------------------------------   D_2         rrcf             BaitL ; делим на два  16 битный Bait (L,H)             btfsc          BaitH,0 ;             bsf            BaitL,7 ;               rrcf             BaitH ;             bcf            BaitH,7 ;             return ;*********************************************************************************************              end

Скачать проект в Mplab 

Ссылка для скачивания доступна только авторизованным пользователям сайта !

Случайные статьи....

Prev Next

Быстрая настройка MPLAB IDE

24-04-2012 Super User

MPLAB IDE, как и упоминалось выше - это пакет программ, включающий в себя , редактор текстов,  симулятор, ассемблер и многое другое. В конечном итоге программист получит на "выходе" файл с расширением "HEX".  В этой главе мы кратко рассмотрим быструю настройку...

ПП чтения данных из Flash памяти программ.

24-05-2012 Super User

 Для чтения содержимого памяти программ используется инструкция (команда) TBLRD. Она имеет несколько разновидностей: TBLRD*     - чтение TBLRD*+ - чтение +1 TBLRD*-  - чтение -1 TBLRD+* - +1,чтение В программе необходимо предварительно записать в указательTBLPTRадрес таблицы (байт) данных,  к примеру,  здесь  задан...

Пишем первую программу.

19-04-2011 Super User

Пишем первую программу.

Вот мы  и подошли к написанию программы. Сейчас не нужно вникать в тонкости и пытаться разобраться во всем. Просто принять как должное. Мы не раз будем в процессе написания программ возвращаться к той и иной части пройденного материала, в том...

Вычисляемый переход .

30-05-2012 Super User

Для чтения памяти программ  применяют,   в том числе и вычисляемый переход. Суть его заключается в том , что при выполнении команды  ADDWF PCL  происходит сложение содержимого регистров W и младшего регистра счетчика команд (PC). В результате программа «перескакивает» на выполнения...


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru