Авторизация


...

Кто на сайте?

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

  • sundbarr

Статистика

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

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

  Плата питания

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

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

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

 

 

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

Мониторинг и удаленное управление оборудованием через Ethernet - NetCo…

11-01-2015 Николай Викторов

Мониторинг и удаленное управление оборудованием через Ethernet - NetComMK RL1

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

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

14-04-2012 Николай Викторов

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

  В некоторых приложениях необходимо рассчитать контрольную сумму путем 16-битного дополнения до единицы суммы дополнений до единицы всех 16-битных слов. Такой метод подсчета в основном применяется в протоколах internet , таких как  IP,UDP,TCP. Данная подпрограмма ориентирована на 18 серию...

Электронный замок на PIC12F675 и 24C16 с управлением от ключей-таблето…

09-06-2011 Alex

Электронный замок на PIC12F675 и 24C16 с управлением от ключей-таблеток DS1990

Download/alex/zamok/sxema.GIFЭлектронный замок на PIC12F675 и памятью 24C16  с управлением от ключей-таблеток DS1990 В данной статье  представлена схема простого замка на PIC12F675 с использованием микросхемы памяти 24с16. Управление исполнительным механизмом (ИМ), на пример магнитом, производится с помощью ключей-таблеток DS1990 фирмы DALLAS.    

Программирование c нуля в AVRStudio 5 (ч.5)

14-03-2012 Радик

Программирование c нуля в AVRStudio 5 (ч.5)

 Сегодня рассмотрим программу “бегущих огней” и “бегущих теней”. Примеры “бегущих огней” можно найти почти в любой обучающей литературе. Чтобы получить “бегущие огни” на выходах порта, нужно последовательно переключать один бит.      “Бегущая тень” получается при инверсии “бегущих огней”. В принципе...


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

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