Авторизация


...

Кто на сайте?

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

  • oegerwilm

Статистика

-Посетители : 26505
-Материалы : 210

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

  pic12f683

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

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

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

 

 

Объем блока данных ограничивается только объемом памяти применяемого микроконтроллера. Если количество байт не четное , то последний байт добавляется самой программой и имеет нулевой значении , в результате блок данных всегда выравнивается 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

Регулятор скорости автомобильной печки на PIC-контроллере

26-04-2011 Иван Шевченко (R1ZK)

Регулятор скорости автомобильной печки на PIC-контроллере

Данный регулятор был сделан по заказу моего друга для автомобиля ЗиЛ 5301 "Бычок". Регулятор собран на микроконтроллере Microchip PIC12F629 и имеет 5 уровней регулировки скорости с индикацией на 5 светодиодах. Выключенное состояние - все светодиоды погашены, 1-й уровень - горит...

Применения системы приоритета прерываний в м/к PIC18XXXX

03-09-2013 Николай Викторов

Применения системы приоритета прерываний в м/к PIC18XXXX

Если в вашем приложении включена приоритетная система прерывания, то при составлении программы необходимо придерживаться определенных рекомендаций. Как мы помним у  прерывания с высоким приоритетом  вектор сброса 08h  в памяти программ, а с низким 18h, т.е. для написания кода в высоком...

Бит, байт и простое объяснение логических операций.

20-04-2012 Super User

Как и в любой вычислительной технике,  где применяется цифровой сигнал  практически всегда встречаются такие слова  как  "бит" и "байт".  Не является исключением и микроконтроллеры. Давайте  попробуем разобраться, что же это такое.

Подключение ENC28J60 + PIC к локальной сети ЧАСТЬ III

08-03-2013 Николай Викторов

Подключение ENC28J60 + PIC к локальной сети ЧАСТЬ III

     В этой статье рассмотрим реализацию  UDP протокола и напишем небольшое приложение, которое будет удаленно управлять нагрузками , подключенными к одному из портов  нашего  микроконтроллера. Всего в примере можно управлять восемью цифровыми нагрузками , в качестве которых могут быть...


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

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