Смекни!
smekni.com

Разработка микропроцессорной системы цифрового термометра на базе микроконтроллера (стр. 6 из 9)

RETURN;

BCFFLAG1,3;ПО УМОЛЧАНИЮ ЗНАК ПЛЮС.

BTFSCLSBH,3;ЕСЛИ ИНАЧЕ,

BSFFLAG1,3;ТО УСТАНОВИМ МИНУС.

BTFSSFLAG1,3;ЕСЛИ ЗНАК ПЛЮС,

GOTO$+7;ТО НЕ ИНВЕРТИРУЕМ.

COMFLSB,1;ПРОИНВЕРТИРУЕМ МЛАДШИЙ

COMFLSBH,1;И СТАРШИЙ РЕГИСТРЫ ПРИЕМА.

BCFSTATUS,0;

INCFLSB,1;ПРИБАВИМ ЕДИНИЦУ.

BTFSCSTATUS,0;ЕСЛИ ЕСТЬ ПЕРЕНОС,

INCFLSBH,1;ТО УВЕЛИЧИМ СТАРШИЙ РЕГИСТР.

MOVFWLSB;ВЫДЕЛИМ ДЕСЯТЫЕ.

ANDLWB'00001111';ЗАМАСКИРУЕМ.

CALLDESATI;ПЕРЕКОДИРУЕМ С ОКРУГЛЕНИЕМ.

MOVWFDST2;ЗАПИШЕМ В РЕГИСТР ДЕСЯТЫХ.

MOVLW.4;СДВИГОМ ВПРАВО НА 4 РАЗРЯДА

MOVWFCOUN;

BCFSTATUS,0;ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ.

RRFLSBH,1;

RRFLSB,1;

DECFSZCOUN,1;

GOTO$-4;

MOVLW.251;ПО УМОЛЧАНИЮ ЗНАК ПЛЮС.

MOVWFSOT2;

BTFSSFLAG1,3;ЕСЛИ ИНАЧЕ,

GOTO$+3;ТО УСТАНОВИМ

MOVLW.253;МИНУС.

MOVWFSOT2;

;======================================================

; 15. ВЫБОР СРАВНЕНИЯ ПО СОХРАНЕННОМУ И ИЗМЕРЕННОМУ ЗНАКАМ 2.

;======================================================

MAXZ2

MOVFWSOT2;ЕСЛИ СОХРАНЕННЫЙ

SUBWFSOT2X,0;И ИЗМЕРЕННЫЙ ЗНАКИ РАВНЫ,

SKPZ;ТО ОПРЕДЕЛИМ ЗНАК.

GOTO$+5;

BTFSSFLAG1,3;ЕСЛИ ЗНАК ПОЛОЖИТЕЛЬНЫЙ,

GOTOCOPL2X;ТО СРАВНИМ НА ПРЕВЫШЕНИЕ.

BTFSCFLAG1,3;ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ,

GOTOCOMI2X;ТО СРАВНИМ НА УМЕНЬШЕНИЕ.

SKPNC;ЕСЛИ ИЗМЕРЕННЫЙ ЗНАК МЕНЬШЕ (+) СОХРАНЕННОГО,

GOTOCOXP2X;ТО СОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.

MINZ2

MOVFWSOT2;ЕСЛИ СОХРАНЕННЫЙ

SUBWFSOT2N,0;И ИЗМЕРЕННЫЙ ЗНАКИ РАВНЫ,

SKPZ;ТО ОПРЕДЕЛИМ ЗНАК.

GOTO$+5;

BTFSCFLAG1,3;ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ,

GOTOCOPL2N;ТО СРАВНИМ НА ПРЕВЫШЕНИЕ.

BTFSSFLAG1,3;ЕСЛИ ЗНАК ПОЛОЖИТЕЛЬНЫЙ,

GOTOCOMI2N;ТО СРАВНИМ НА УМЕНЬШЕНИЕ.

SKPC;ЕСЛИ ИЗМЕРЕННЫЙ ЗНАК БОЛЬШЕ (-) СОХРАНЕННОГО,

GOTOCOXP2N;ТО СОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.

GOTOBDIN2;НА ЗАПИСЬ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.

;===================================

; 16. СРАВНЕНИЕ НА MAX 2.

;===================================

COPL2X

MOVFWLSB2X;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;БОЛЬШЕ ИЗМЕРЕННОГО,

BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.

GOTOMINZ2;ПРОВЕРИМ НА МИНИМУМ.

BTFSSSTATUS,2;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,

GOTO$+5;

MOVFWDST2X;ТО ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST2,0;ЕСЛИ ИЗМЕРЕННОЕ БОЛЬШЕ

BTFSSSTATUS,0;ИЛИ РАВНО СОХРАНЕННОМУ, ТО СОХРАНИМ.

GOTOMINZ2;ЕСЛИ МЕНЬШЕ, ТО ПРОВЕРИМ НА МИНИМУМ.

COXP2X

BTFSSFLAG1,3;-0 НЕТ.

GOTO$+4;

TSTFLSB;

BZMINZ2;

MOVFWSOT2;СОХРАНИМЗНАК.

MOVWFSOT2X;

MOVFWLSB;СОХРАНИМ НОВОЕ ЗНАЧЕНИЕ

MOVWFLSB2X;ЦЕЛЫХ

MOVFWDST2;И ДЕСЯТЫХ.

MOVWFDST2X;

MOVFWMIN;СОХРАНИМ

MOVWFMIN2X;МИНУТЫ

MOVFWHOU;

MOVWFHOU2X;И ЧАСЫ.

BTFSCFLAG1,3;ПЕРЕПИШЕМ ЗНАК

BSFFLAG2,3;ВО ФЛАГ ХРАНЕНИЯ.

BTFSSFLAG1,3;

BCFFLAG2,3;

GOTOMINZ2;НА ПРОВЕРКУ ПО МИНИМУМУ.

COMI2X

MOVFWLSB2X;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;РАВНО ИЗМЕРЕННОМУ,

BTFSCSTATUS,2;

GOTO$+3;ТО ПРОВЕРИМ ДЕСЯТЫЕ.

BTFSSSTATUS,0;ЕСЛИ БОЛЬШЕ,

GOTOCOXP2X;ТО СОХРАНИМ.

MOVFWDST2X;ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST2,0;ЕСЛИ СОХРАНЕННОЕ МЕНЬШЕ

BTFSCSTATUS,0;ИЛИ РАВНО ИЗМЕРЕННОМУ,

GOTOMINZ2;ТО ПРОВЕРИМ НА МИНИМУМ.

GOTOCOXP2X;ИЛИ СОХРАНИМ.

;===================================

; 17. СРАВНЕНИЕ НА MIN 2.

;===================================

COPL2N

MOVFWLSB2N;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;БОЛЬШЕ ИЗМЕРЕННОГО,

BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.

GOTOBDIN2;ПЕРЕПИШЕМ.

BTFSSSTATUS,2;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,

GOTO$+5;

MOVFWDST2N;ТО ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST2,0;

BTFSSSTATUS,0;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО, ТО СОХРАНИМ.

GOTOBDIN2;ПЕРЕПИШЕМ.

COXP2N

BTFSSFLAG1,3;-0 НЕТ.

GOTO$+4;

TSTFLSB;

BZBDIN2;

MOVFWSOT2;СОХРАНИМ ЗНАК.

MOVWFSOT2N;

MOVFWLSB;СОХРАНИМ НОВОЕ ЗНАЧЕНИЕ

MOVWFLSB2N;ЦЕЛЫХ

MOVFWDST2;И ДЕСЯТЫХ.

MOVWFDST2N;

MOVFWMIN;СОХРАНИМ

MOVWFMIN2N;МИНУТЫ

MOVFWHOU;

MOVWFHOU2N;И ЧАСЫ.

BTFSCFLAG1,3;ПЕРЕПИШЕМ ЗНАК

BSFFLAG2,4;ВО ФЛАГ ХРАНЕНИЯ.

BTFSSFLAG1,3;

BCFFLAG2,4;

GOTOBDIN2;ПЕРЕПИШЕМ.

COMI2N

MOVFWLSB2N;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;МЕНЬШЕ ИЗМЕРЕННОГО,

BTFSCSTATUS,2;

GOTO$+3;

BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.

GOTOCOXP2N;ИНАЧЕ СОХРАНИМ.

MOVFWDST2N;ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST2,0;ЕСЛИ МЕНЬШЕ

BTFSCSTATUS,0;ИЛИ РАВНО,

GOTOBDIN2;

GOTOCOXP2N;ТО СОХРАНИМ.

;==================================

; 18. ЗАДЕРЖКА МКС, УМНОЖЕННАЯ НА 4.

;==================================

X4

ADDLW-1;

BTFSSSTATUS,2;

GOTO$-2;

RETURN;

;=========================================

; 19. ИНИЦИАЛИЗАЦИЯ DS1.

;=========================================

INIDS1

CALLHYL1;ПОСЫЛИМПУЛЬСАОБНУЛЕНИЯ.

MOVLW0xCC;ПРОПУСКНОМЕРА.

CALLPOSIL1;ПОШЛЕМ.

MOVLW0x4E;РАЗРЕШАЕМ ЗАПИСЬ УСТАНОВКИ 0,1 ГРАДУСА.

CALLPOSIL1;ПОШЛЕМ.

MOVLW0x7D;ВЕРХНИЙ ПРЕДЕЛ +125. МОЖНО ПОСТАВИТЬ ЛЮБОЕ ЗНАЧЕНИЕ.

CALLPOSIL1;ПОШЛЕМ.

MOVLW0x77;НИЖНИЙ ПРЕДЕЛ -55. ЛЮБОЙ.

CALLPOSIL1;ПОШЛЕМ.

MOVLW0x7F;КОНФИГУРАЦИЯ 11 = 0,1 ГРАДУС.

CALLPOSIL1;ПОШЛЕМ.

CALLHYL1;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.

MOVLW0xCC;ПРОПУСК ПОСЫЛА НОМЕРА DS.

CALLPOSIL1;ПОШЛЕМ.

MOVLW0x44;РАЗРЕШАЕМ ПРЕОБРАЗОВАНИЕ.

CALLPOSIL1;ПОШЛЕМ.

MOVLW.3;ПАУЗА 0,75 СЕК.

MOVWFCOUN;МАКСИМАЛЬНО 750 МС.

SPLU1

MOVLW.255

MOVWF TEMP

PLUS1

MOVLW .255

ADDLW -1

BTFSS STATUS,2

GOTO $-2

DECFSZ TEMP,1

GOTO PLUS1

DECFSZCOUN,1

GOTOSPLU1

GOTOPRIEM1;НАПРИЕМТЕМПЕРАТУРЫ.

HYL1

CALLWUX1;ВЫХОДНУЛЯ.

MOVLW.125;НУЛЕВОЙИМПУЛЬС

ADDLW-1;= 500 МКС.

BTFSSSTATUS,2;

GOTO$-2;

CALLWXO1;ВЫХОДЕДИНИЦЫ.

MOVLW.125;ИМПУЛЬС =

ADDLW-1;500 МКС.

BTFSSSTATUS,2;

GOTO$-2;

RETURN

;=======================================

; 20. ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.

;=======================================

WUX1

BCFPORTA,DS1;

BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.

BCFTRISA^80H,DS1;НА ВЫХОД.

BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.

RETURN

WXO1

BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.

BSFTRISA^80H,DS1;НА ВХОД.

BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.

RETURN

;====================================

; 21. ПРИЕМ 16 БИТ ОТ DS1.

;====================================

PRIEM1

CALLHYL1;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.

MOVLW0xCC;ПРОПУСК НОМЕРА.

CALLPOSIL1;ПОСЫЛ.

MOVLW0xBE;ЧТЕНИЕ ТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.

CALLPOSIL1;ПОСЫЛ.

BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.

CALL PRIE1;НА ПРИЕМ.

MOVFWLSBH;ПЕРЕПИШЕМ ПРИНЯТЫЙ БАЙТ

MOVWFLSB;В МЛАДШИЙ РЕГИСТР.

BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.

CALLPRIE1;И ПРИМЕМ СТАРШИЙ БАЙТ.

GOTOCXET1;НА ПЕРЕСЧЕТ.

PRIE1

MOVLW.8

MOVWFCOUN;ЗАПИШЕМ ЧИСЛО БИТ.

CLRFLSBH;ОБНУЛИМ РЕГИСТР ПРИЕМА.

PRI1

CALLWUX1;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.

CALLWXO1;НА ПРИЕМ.

MOVLW.2;ЗАДЕРЖКА

CALLX4;8 МКС.

MOVFWPORTA;ПЕРЕПИШЕМ

MOVWFTEMP;ЗНАЧЕНИЕ ПОРТА.

BTFSSTEMP,DS1;

BCFSTATUS,0;УСТАНОВИМ БИТ ПРИЕМА В НОЛЬ.

BTFSCTEMP,DS1;

BSFSTATUS,0;ИЛИ ЕДИНИЦУ.

RRFLSBH,1;ЗАПИШЕМ В РЕГИСТР.

MOVLW.12;ОБЩАЯ ПАУЗА 60 МКС.

CALLX4;

DECFSZCOUN,1;УМЕНЬШИМ СЧЕТЧИК.

GOTOPRI1;ПОВТОРИМ ПРИЕМ.

BSFINTCON,7;РАЗРЕШАЕМ ПРЕРЫВАНИЯ.

RETURN;ВЕРНЕМСЯ.

;==========================================

; 22. ПОСЫЛ КОМАНДЫ В DS1.

;==========================================

POSIL1

BCFINTCON,7;ЗАПРЕТ ПРЕРЫВАНИЙ.

MOVWFTEMP;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.

MOVLW.8;ЗАПИШЕМ ЧИСЛО БИТ.

MOVWFCOUN;

POSI1

RRFTEMP,1;ВЫТОЛКНЕМ МЛАДШИЙ БИТ.

BTFSSSTATUS,0;ЕСЛИ ОН НУЛЕВОЙ,

GOTOW0_1;ПОШЛЕМ ИМПУЛЬС НУЛЯ.

GOTOW1_1;ИЛИ ЕДИНИЦЫ.

POS1

DECFSZCOUN,1;УМЕНЬШАЕМ СЧЕТЧИК.

GOTOPOSI1;НА СЛЕДУЮЩИЙ БИТ.

BSFINTCON,7;РАЗРЕШАЕМ ПРЕРЫВАНИЯ.

RETURN;ВОЗВРАТ.

W0_1

CALLWUX1;УСТАНОВИМ ВЫХОД В НОЛЬ.

MOVLW.15;УДЕРЖИВАЕМ 60 МКС.

CALL X4;

CALLWXO1;НА ВХОД = 1 НА ВЫХОДЕ.

GOTOPOS1;ПОВТОРИМ.

W1_1

CALLWUX1;КОРОТКИЙ НУЛЕВОЙ ИМПУЛЬС.

CALLWXO1;НА ВХОД = 1 НА ВЫХОДЕ.

MOVLW.15;УДЕРЖИВАЕМ 60 МКС.

CALLX4;

GOTOPOS1;ПОВТОРИМ.

;==================================

; 23. ВЫДЕЛЕНИЕ 1.

;==================================

CXET1

BTFSCFLAG1,4;НАЧАЛЬНАЯ ПАУЗА.

GOTO$+3;

BSFFLAG1,4;

RETURN;

BCFFLAG1,3;ПО УМОЛЧАНИЮ ЗНАК ПЛЮС.

BTFSCLSBH,3;ЕСЛИ ИНАЧЕ,

BSFFLAG1,3;ТО УСТАНОВИМ МИНУС.

BTFSSFLAG1,3;ЕСЛИ ЗНАК ПЛЮС,

GOTO$+7;ТО НЕ ИНВЕРТИРУЕМ.

COMFLSB,1;ПРОИНВЕРТИРУЕМ МЛАДШИЙ

COMFLSBH,1;И СТАРШИЙ РЕГИСТРЫ ПРИЕМА.

BCFSTATUS,0;

INCFLSB,1;ПРИБАВИМ ЕДИНИЦУ.

BTFSCSTATUS,0;ЕСЛИ ЕСТЬ ПЕРЕНОС,

INCFLSBH,1;ТО УВЕЛИЧИМ СТАРШИЙ РЕГИСТР.

MOVFWLSB;ВЫДЕЛИМ ДЕСЯТЫЕ.

ANDLWB'00001111';ЗАМАСКИРУЕМ.

CALLDESATI;ПЕРЕКОДИРУЕМ С ОКРУГЛЕНИЕМ.

MOVWFDST1;ЗАПИШЕМ В РЕГИСТР ДЕСЯТЫХ.

MOVLW.4;СДВИГОМ ВПРАВО НА 4 РАЗРЯДА

MOVWFCOUN;

BCFSTATUS,0;ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ.

RRFLSBH,1;

RRFLSB,1;

DECFSZCOUN,1;

GOTO$-4;

MOVLW.251;ПО УМОЛЧАНИЮ ЗНАК ПЛЮС.

MOVWFSOT1;

BTFSSFLAG1,3;ЕСЛИ ИНАЧЕ,

GOTO$+3;ТО УСТАНОВИМ

MOVLW.253;МИНУС.

MOVWFSOT1;

;======================================================

; 24. ВЫБОР СРАВНЕНИЯ ПО СОХРАНЕННОМУ И ИЗМЕРЕННОМУ ЗНАКАМ 1.

;======================================================

MAXZ

MOVFWSOT1;ЕСЛИ ЗНАКИ РАВНЫ,

SUBWFSOT1X,0;

SKPZ;ТО ОПРЕДЕЛИМ ЗНАК.

GOTO$+5;

BTFSSFLAG1,3;ЕСЛИ ЗНАК ПЛЮС,

GOTOCOPL1X;ТО ПРОВЕРЯЕМ НА ПРЕВЫШЕНИЕ.

BTFSCFLAG1,3;ЕСЛИ ЗНАК МИНУС,

GOTOCOMI1X;ТО ПРОВЕРЯЕМ НА УМЕНЬШЕНИЕ.

SKPNC;ЕСЛИ ИЗМЕРЕННЫЙ ЗНАК МЕНЬШЕ (+) СОХРАНЕННОГО,

GOTOCOXPX;ТО СОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.

MINZ

MOVFWSOT1;ЕСЛИ ЗНАКИ РАВНЫ,

SUBWFSOT1N,0;

SKPZ;ТО ОПРЕДЕЛИМ ЗНАК.

GOTO$+5;

BTFSCFLAG1,3;ЕСЛИ ЗНАК МИНУС,

GOTOCOPL1N;ТО СРАВНИВАЕМ НА ПРЕВЫШЕНИЕ.

BTFSSFLAG1,3;ЕСЛИ ЗНАК ПЛЮС,

GOTOCOMI1N;ТО СРАВНИВАЕМ НА УМЕНЬШЕНИЕ.

SKPC;ЕСЛИ ИЗМЕРЕННЫЙ ЗНАК БОЛЬШЕ (-) СОХРАНЕННОГО,

GOTOCOXPN;ТО СОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.

GOTOBDIN1;НА ПЕРЕКОДИРОВКУ.

;===================================

; 25. СРАВНЕНИЕ НА MAX 1.

;===================================

COPL1X

MOVFWLSB1X;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;БОЛЬШЕ ИЗМЕРЕННОГО,

BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.

GOTOMINZ;.

BTFSSSTATUS,2;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,

GOTO$+5;

MOVFWDST1X;ТО ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST1,0;ЕСЛИ БОЛЬШЕ

BTFSSSTATUS,0;ИЛИ РАВНО, ТО СОХРАНИМ.

GOTOMINZ;ИНАЧЕ ПРОВЕРИМ НА МИНИМУМ.

COXPX

BTFSSFLAG1,3;-0 НЕТ.

GOTO$+4;

TSTFLSB;

BZMINZ;

MOVFWSOT1;СОХРАНИМ МАКСИМАЛЬНОЕ ЗНАЧЕНИЕ.

MOVWFSOT1X;ЗНАК.

MOVFWLSB;СОХРАНИМ НОВОЕ ЗНАЧЕНИЕ

MOVWFLSB1X;ЦЕЛЫХ

MOVFWDST1;И ДЕСЯТЫХ.

MOVWFDST1X;

MOVFWMIN;

MOVWFMIN1X;МИНУТЫ.

MOVFWHOU;

MOVWFHOU1X;ЧАСЫ.

BTFSCFLAG1,3;ПЕРЕПИШЕМ ФЛАГ ЗНАКА

BSFFLAG,0;В ФЛАГ ХРАНЕНИЯ.

BTFSSFLAG1,3;

BCFFLAG,0;

GOTOMINZ;НА ПРОВЕРКУ ПО МИНИМУМУ.

COMI1X

MOVFWLSB1X;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;МЕНЬШЕ ИЗМЕРЕННОГО,

BTFSCSTATUS,2;ТО СОХРАНЕНИЯ НЕТ.

GOTO$+3;

BTFSSSTATUS,0;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,

GOTOCOXPX;

MOVFWDST1X;ТО ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST1,0;ЕСЛИ МЕНЬШЕ

BTFSCSTATUS,0;ИЛИ РАВНО,

GOTOMINZ;СРАВНИМ ПО МИНИМУМУ.

GOTOCOXPX;ИНАЧЕ СОХРАНИМ.

;===================================

; 26. СРАВНЕНИЕ НА MIN 1.

;===================================

COPL1N

MOVFWLSB1N;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;МЕНЬШЕ ИЗМЕРЕННОГО,

BTFSSSTATUS,0;ТО СОХРАНЕНИЯ НЕТ.

GOTOBDIN1;ПЕРЕПИШЕМ.

BTFSSSTATUS,2;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,

GOTO$+5;

MOVFWDST1N;ТО ПРОВЕРИМ ДЕСЯТЫЕ.

SUBWFDST1,0;ЕСЛИ ИЗМЕРЕННОЕ МЕНЬШЕ

BTFSSSTATUS,0;ИЛИ РАВНО СОХРАНЕННОМУ, ТО СОХРАНИМ.

GOTOBDIN1;НА ПЕРЕКОДИРОВКУ.

COXPN

BTFSSFLAG1,3;-0 НЕТ.

GOTO$+4;

TSTFLSB;

BZBDIN1;

MOVFWSOT1;СОХРАНЕНИЕ МИНИМАЛЬНОГО.

MOVWFSOT1N;ЗНАК.

MOVFWLSB;СОХРАНИМ НОВОЕ ЗНАЧЕНИЕ

MOVWFLSB1N;ЦЕЛЫХ

MOVFWDST1;И ДЕСЯТЫХ.

MOVWFDST1N;

MOVFWMIN;

MOVWFMIN1N;МИНУТЫ.

MOVFWHOU;

MOVWFHOU1N;ЧАСЫ.

BTFSCFLAG1,3;ПЕРЕПИШЕМ ФЛАГ ЗНАКА

BSFFLAG,1;В ФЛАГ ХРАНЕНИЯ.

BTFSSFLAG1,3;

BCFFLAG,1;

GOTOBDIN1;НА ПЕРЕКОДИРОВКУ.

COMI1N

MOVFWLSB1N;ЕСЛИ СОХРАНЕННОЕ ЗНАЧЕНИЕ

SUBWFLSB,0;МЕНЬШЕ ИЗМЕРЕННОГО,

BTFSCSTATUS,2;

GOTO$+3;ТО СОХРАНЕНИЯ НЕТ.

BTFSSSTATUS,0;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,