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;ЕСЛИ РАВЕНСТВО ЦЕЛЫХ,