Авторизация


...

Кто на сайте?

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

  • inmiernikwesto

Статистика

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

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

  pic12f683

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

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

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

 

 

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

Контроллер радиолюбительского репитера RR1Z

07-02-2016 Иван Шевченко (R1ZK)

Контроллер радиолюбительского репитера RR1Z

В данной статье  рассматривается контроллер  радиолюбительского репитера, который был разработан по просьбе радиолюбителей клуба «Мурманск» и предназначен для установки в составе репитера RR1Z.  Устройство работает без нареканий с марта 2015 года. Автором предоставлены все необходимые для повторения материалы включая исходник...

Заказ печатных плат в Китае.

29-05-2015 Николай Викторов

Заказ печатных плат в Китае.

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

Доработка логического анализатора цифровых сигналов LOGIC-U

11-09-2011 Александр Милевский

Доработка логического анализатора цифровых сигналов LOGIC-U

После приобретения  LOGIC-U и попытки с ним работать, была замечена масса  неудобств. Предлагаемый набор надо постоянно собирать, переключать джамперы, а тонкие  провода анализатора часто обрываются.Также неудобно пользоваться целой связкой этих проводов, хотя нужно порой только 2 - 4 из них....

Блок управления для духовки

11-03-2017 Super User

Блок управления  для духовки

  В этой статье автор представляет блок управления духовкой с поддержкой температуры в пределах  0-300 гр.С .  Описано очень подробно и предоставлены все материалы для повторения данной конструкции, включая  печатную плату  в 4-х форматах: DipTrace, Lay6, PDF, Gerber и мн....


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

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