62174 (611441), страница 5
Текст из файла (страница 5)
RETURN
CLRFHL;
INCFHH,1;
RETURN
HL4
MOVFWHL;ЕСЛИ ЕДИНИЦЫ ЧАСОВ
ADDLW-3H;РАВНЫ 3,
BZHOH;ИДЕМ ОБНУЛЯТЬ.
INCFHL,1;ИЛИ ПРИБАВИМ ЕДИНИЦУ.
RETURN
HOH
CLRFHL;
CLRF HH;ОБНУЛИМ ДЕСЯТКИ ЧАСОВ.
RETURN;
;=============================================
; 14. ТАЙМЕР.
;=============================================
TAIM
BSFFLAG,5;СЛЕДУЮЩАЯ ОСТАНОВКА ТАЙМЕРА.
MOVLW.9;ЕСЛИ УЖЕ 9 СЕКУНД,
SUBWFTCL,0;
BC$+3;ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ СЕКУНД.
INCFTCL,1;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
RETURN
CLRFTCL;ОБНУЛИМ СЕКУНДЫ.
MOVFWTCH;ЕСЛИ ДЕСЯТКИ СЕКУНД
ADDLW-5H;РАВНЫ 5,
BZ$+3;ИДЕМ СРАВНИВАТЬ МИНУТЫ.
INCFTCH,1;ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ СЕКУНД.
RETURN
CLRFTCH;ОБНУЛИМ ДЕСЯТКИ СЕКУНД.
MOVFWTML;ЕСЛИ ЕДИНИЦЫ МИНУТ
ADDLW-9H;РАВНЫ 9,
BZ$+3;ИДЕМ СРАВНИВАТЬ ДЕСЯТКИ.
INCFTML,1;ИНАЧЕ УВЕЛИЧИМ МИНУТЫ.
RETURN
CLRFTML;ОБНУЛИМ ЕДИНИЦЫ МИНУТ.
MOVFWTMH;ЕСЛИ ДЕСЯТКИ МИНУТ
ADDLW-5H;РАВНЫ 5,
BZ$+3;УВЕЛИЧИМ ЧАСЫ.
INCFTMH,1;ИЛИ УВЕЛИЧИМ ДЕСЯТКИ МИНУТ.
RETURN
CLRFTMH;ОБНУЛИМ ДЕСЯТКИ МИНУТ.
MOVFWTHL;ЕСЛИ ЕДИНИЦЫ ЧАСОВ РАВНЫ 9,
ADDLW-9H;
BZ$+3;УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ.
INCFTHL,1;ИЛИ УВЕЛИЧИМ ЕДИНИЦЫ ЧАСОВ.
RETURN
CLRFTHL;ОБНУЛИМ ЧАСЫ.
MOVFWTHH;ЕСЛИ ДЕСЯТКИ ЧАСОВ РАВНЫ 9,
ADDLW-9H;
BZ$+3;ОБНУЛИМ.
INCFTHH,1;ИЛИ УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ.
RETURN
CLRFTHH;
RETURN
T00
BTFSSFLAG,5;
GOTO$+4;
BCFFLAG,2;ТАЙМЕР ВЫКЛЮЧЕН.
BCFFLAG,5;СЛЕДУЮЩЕЕ ВКЛЮЧЕНИЕ ТАЙМЕРА.
RETURN;
CLRFTCL;ВСЕ ОБНУЛЯЕМ.
CLRFTCH;
CLRFTML;
CLRFTMH;
CLRFTHL;
CLRFTHH;
BSFFLAG,2;ВКЛЮЧИМ ТАЙМЕР.
RETURN
;===================================================
; 15. АЦП - ПРЕОБРАЗОВАНИЯ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН).
;===================================================
ADP
MOVLWB'10000001';СИНХРОНИЗАЦИЯ ОТ RC
MOVWFADCON0;ГЕНЕРАТОРА, ВХОД 0, ВКЛЮЧЕНИЕ АЦП (YBX).
CALLZAD;
BSFADCON0,1;ВКЛЮЧИМ ПРЕОБРАЗОВАНИЕ.
BTFSCADCON0,1;ОЖИДАЕМ ЗАВЕРШЕНИЯ
GOTO$-1 ;ПРЕОБРАЗОВАНИЯ.
MOVFWADRESH ;ПЕРЕПИШЕМ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ
MOVWFTEKH;В СТАРШИЙ ТЕКУЩИЙ РЕГИСТР.
BSFSTATUS,5;ПЕРЕХОДИМ В БАНК 1.
MOVLW58;
MOVWFFSR;ПО КОСВЕННОЙ АДРЕСАЦИИ
MOVFWADRESL;ЗАПИСЬ МЛ. РЕГИСТРА АЦП
MOVWFINDF;В РЕГИСТР TEKL.
BCFSTATUS,5;ПЕРЕХОДИМ В БАНК 0.
CALLCOMPA;
GOTOBINDEC;ПЕРЕКОДИРУЕМ В 2_10 КОД.
ZAD
MOVLW.5;ЗАДЕРЖКА 20 МКС.
ADDLW-1;
BTFSSSTATUS,2;
GOTO$-2;
RETURN
;===========================
; 16. СРАВНЕНИЕ С УСТАНОВКОЙ.
;===========================
COMPA
TSTFTEKL;
BTFSCSTATUS,2;
GOTOVUKL;
MOVFWYCTL;УСТАНОВКА МАКСИМУМА.
SUBWFTEKL,0;ИЗМЕРЕНИЕ,
BTFSCSTATUS,0;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО,
GOTOVUKL;ТО ВКЛЮЧАЕТСЯ ЗУММЕР.
MOVFWYCTLI;УСТАНОВКА МИНИМУМА.
SUBWFTEKL,0;ИЗМЕРЕНИЕ,
BTFSSSTATUS,0;ЕСЛИ МЕНЬШЕ,
GOTOVUKL;ТО ВКЛЮЧАЕТСЯ ЗУММЕР.
BTFSCSTATUS,2;ЕСЛИ РАВНО,
GOTOVUKL;ТО ВКЛЮЧАЕТСЯ ЗУММЕР.
BCFFLAG1,4;ЗУММЕР ВЫКЛЮЧЕН.
BCFFLAG1,5;ЗУММЕР ВЫКЛЮЧЕН.
BCFPORTC,0;ВЫКЛЮЧИМ СИГНАЛ.
RETURN
VUKL
BTFSCPORTA,KY;
GOTO$+5;
BSFFLAG1,5;ПОСТАВИМ СТОРОЖОК НА 1 ЧАС.
BCFPORTC,0;ВЫКЛЮЧИМ СИГНАЛ.
BTFSCFLAG1,5;ЕСЛИ 1 ЧАС ПРОШЕЛ, ТО ВКЛЮЧИМ СИГНАЛ.
RETURN
BTFSCFLAG1,4;ЕСЛИ ВЫХОД УЖЕ ВЫКЛЮЧЕН,
RETURN;СРАВНЕНИЙ НЕТ.
BSFPORTC,0;ВКЛЮЧИМ СИГНАЛ.
BSFFLAG1,4;ЗУММЕР ВКЛЮЧЕН.
RETURN
;======================================================
; 17. ПЕРЕКОДИРОВКА ИЗ 16-И РАЗРЯДНОГО 2-ГО В 5- РАЗРЯДНОЕ 2-10-Е.
; АЛГОРИТМ ПЕРЕКОДИРОВКИ ОСНОВЫВАЕТСЯ НА ПРИБАВЛЕНИИ 3 В МЛАДШИЙ
; И СТАРШИЙ ПОЛУБАЙТЫ. ЕСЛИ РЕЗУЛЬТАТ СПЕРЕНОСОМ 1 В 3 РАЗРЯД (10=7+3), ТО ЗАПИСЫВАЕМ
; НОВОЕ ЗНАЧЕНИЕ В РЕГИСТР. ВЫПОЛНЯЕМ 16 РАЗ СДВИГАЯ БИТЫ РЕГИСТРОВ.
;======================================================
BINDEC
MOVLW .16 ;ЗАПИШЕМ ЧИСЛО СДВИГОВ
MOVWF COU ;В СЧЕТЧИК.
BIDE
BCF STATUS,0 ;ОБНУЛИМ БИТ "С".
RLF TEKL,1 ;СДВИНЕМ ПЕРЕКОДИРУЕМОЕ
RLF TEKH,1 ;ЧИСЛО ПЕРЕМЕЩАЯ ЕГО СТАРШИЙ БИТ
RLF EDA,1 ;В МЛАДШИЙ БИТ РЕГИСТРОВ
RLF DEA,1 ;РЕЗУЛЬТАТА.
DECFSZ COU,1 ;ЗАФИКСИРУЕМ СДВИГ В СЧЕТЧИКЕ.
GOTO RASDEC ;ПРОВЕРИМ ПОЛУБАЙТЫ НА СЕМЕРКУ.
GOTO MESTO ;ЕСЛИ СЧЕТЧИК ПУСТ, ЗАПОЛНИМ РЕГИСТРЫ ИНДИКАЦИИ.
RASDEC
MOVLW EDA ;ЗАПИШЕМ АДРЕС РЕГИСТРА
MOVWF FSR ;В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
CALL BCD ;ПРОВЕРИМ ЗНАЧЕНИЕ РЕГИСТРА НА 7.
MOVLW DEA ;АНАЛОГИЧНЫЕ ОПЕРАЦИИ ПРОДЕЛАЕМ
MOVWF FSR ;С ДРУГИМИ РЕГИСТРАМИ.
CALL BCD ;
GOTO BIDE ;ПОЙДЕМ ПОВТОРЯТЬ СДВИГ.
BCD
MOVLW 3 ;0000 0011
ADDWF 0,0 ;ПРИБАВИМ 3 К РЕГИСТРУ И РЕЗУЛЬТАТ
MOVWF TEMP ;ЗАПИШЕМ ВО ВРЕМЕННЫЙ РЕГИСТР.
BTFSC TEMP,3 ;ПРОВЕРИМ 3 БИТ И ЕСЛИ ОН РАВЕН НУЛЮ,
MOVWF 0 ;ПРОПУСКАЕМ ЗАПИСЬ РЕЗУЛЬТАТА В РЕГИСТР.
MOVLW 30 ;48=0011 0000
ADDWF 0,0 ;ПРИБАВИМ 3 К СТАРШЕМУ ПОЛУБАЙТУ РЕГИСТРА И РЕЗУЛЬТАТ
MOVWF TEMP ;ЗАПИШЕМ ВО ВРЕМЕННЫЙ РЕГИСТР.
BTFSC TEMP,7 ;ЕСЛИ БИТ ЕДИНИЧНЫЙ,
MOVWF 0 ;ТО ЗАПИШЕМ НОВОЕ ЗНАЧЕНИЕ В РЕГИСТР.
RETURN ;ВЕРНЕМСЯ ДЛЯ ЗАГРУЗКИ НОВОГО ЗНАЧЕНИЯ РЕГИСТРА.
;======================================================
; 18. ИЗВЛЕКАЕМ ПОЛУБАЙТЫ ИЗ РЕГИСТРОВ СЧЕТА В РЕГИСТРЫ ИНДИКАЦИИ.
;======================================================
MESTO
MOVLWB'00001111';ИЗВЛЕКАЕМ ПОЛУБАЙТЫ
ANDWFDEA,0;В РЕГИСТРЫ ИНДИКАЦИИ.
MOVWFCOI;
MOVLWB'11110000';
ANDWFEDA,0 ;
MOVWFDEI ;
SWAPFDEI,1 ;
MOVLWB'00001111';
ANDWFEDA,0;
MOVWFEDI;
CLRFEDA;
CLRFDEA;
RETURN;
;==================================================
; 19. СМЕНА ИНДИКАЦИИ ПРИ СМЕНЕ РЕЖИМА.
;==================================================
INDH
BTFSCFLAG,7;ЕСЛИ КУРСОР ЕСТЬ,
CALLYCT;ТО ИДЕМ НА УСТАНОВКУ.
MOVLW.10;ПУСТО.
CALLSEG;ЗАПОЛНИМ РЕГИСТРЫ ИНДИКАЦИИ.
MOVWFR1;
MOVWFR2;
MOVWFR8;
BTFSSFLAG,6;
GOTO$+6;
MOVLW.11;ПРОЧЕРК СРЕДНИЙ.
CALLSEG;
MOVWFR5;
BCFFLAG,6;
GOTO$+5;
MOVLW.12;ПРОЧЕРК НИЖНИЙ.
CALLSEG;
MOVWFR5;
BSFFLAG,6;
MOVFWML;
CALLSEG;
MOVWFR3;
MOVFWMH;
CALLSEG;
MOVWFR4;
MOVFWHL;
CALLSEG;
MOVWFR6;
MOVFWHH;
CALLSEG;
MOVWFR7;
BSFFLAG,1;ВКЛЮЧИМ РЕЖИМ ЧАСОВ.
CLRFZPT;
RETURN;
INDT
BTFSSPORTA,KY;ЕСЛИ КНОПКА НАЖАТА,
CALLT00;ТО ИДЕМ ОБНУЛЯТЬ ТАЙМЕР.
MOVFWTCL;ЗАПОЛНИМ РЕГИСТРЫ ИНДИКАЦИИ
CALLSEG;МИНУТ И СЕКУНД ПРАВЫХ ЧАСОВ.
MOVWFR1;
MOVFWTCH;
CALLSEG;
MOVWFR2;
MOVFWTML;
CALLSEG;
MOVWFR4;
MOVFWTMH;
CALLSEG;
MOVWFR5;
MOVLW.11;ПРОЧЕРК.
CALLSEG;
MOVWFR3;
MOVWFR6;
MOVFWTHL;
CALLSEG;
MOVWFR7;
MOVFWTHH;
CALLSEG;
MOVWFR8;
BCFFLAG,1;РЕЖИМ ЧАСЫ ВЫКЛЮЧЕН.
BCFFLAG,7;НЕТ УСТАНОВКИ.
RETURN;
INDU
MOVLW.10;ПУСТО.
CALLSEG;ЗАПОЛНИМ РЕГИСТРЫ ИНДИКАЦИИ.
MOVWFR1;
MOVWFR2;
MOVWFR3;
MOVWFR7;
MOVWFR8;
MOVFW COI;
CALLSEG;
MOVWFR6;
MOVFW DEI;
CALLSEG;
MOVWFR5;
MOVFW EDI;
CALLSEG;
MOVWFR4;
BSFZPT,4;
RETURN;
;===================================================
; 20. РАСПРЕДЕЛИТЕЛЬ.
;===================================================
PAC
BTFSSFLAG1,1;ЖДЕМ 1 СЕКУНДУ.
GOTO$-1;
CALLADP;
CALLKHOP;НА ПРОВЕРКУ КНОПОК.
CALLIND;НА ИНДИКАЦИЮ.
BCFFLAG1,1;
GOTOPAC;ПОВТОРИМ.
;=====================================================
; 21. УСТАНОВКА ВРЕМЕНИ.
;=====================================================
YC0
INCFML,1;УВЕЛИЧИМ ЕДИНИЦЫ МИНУТ.
MOVLW.10;НЕ БОЛЕЕ 9.
SUBWFML,0;
SKPNC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 10,
CLRFML;ТО ОБНУЛИМ.
RETURN
YC1
INCFMH,1;УВЕЛИЧИМ ДЕСЯТКИ МИНУТ.
MOVLW.6;НЕ БОЛЕЕ 5.
SUBWFMH,0;
SKPNC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 6,
CLRFMH;ТО ОБНУЛИМ.
RETURN
YC2
INCFHL,1;УВЕЛИЧИМ ЕДИНИЦЫ ЧАСОВ.
MOVLW.10;НЕ БОЛЕЕ 9.
SUBWFHL,0;
SKPNC;
CLRFHL;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWHH;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ
CALLDEBIN;КОД ДЕСЯТКИ.
ADDWFHL,0;ПРИБАВИМ ЕДИНИЦЫ
MOVWFHOU;ДВОИЧНОЕ ЗНАЧЕНИЕ НЕ ДОЛЖНО
ADDLW-18H;ПРЕВЫШАТЬ - 24.
SKPC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 24,
RETURN
CLRFHOU;ТО ОБНУЛИМ ЧАСЫ ДВОИЧНЫЕ
CLRFHL;И РАЗРЯДЫ СТАРШИЙ
CLRFHH;И МЛАДШИЙ.
RETURN
YC3
INCFHH,1;УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ.
MOVLW.3;НЕ БОЛЕЕ 2.
SUBWFHH,0;
SKPNC;
CLRFHH;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWHH;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ
CALLDEBIN;КОД ДЕСЯТКИ.
ADDWFHL,0;ПРИБАВИМ ЕДИНИЦЫ
MOVWFHOU;И ПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
ADDLW-18H;
SKPC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 24,
RETURN
CLRFHOU;ТО ОБНУЛИМ ЧАСЫ ДВОИЧНЫЕ
CLRFHL;И РАЗРЯДЫ СТАРШИЙ
CLRFHH;И МЛАДШИЙ.
RETURN;ВЕРНЕМСЯ.
YCE
CLRFCL;ОБНУЛЕНИЕ.
CLRFCH;
CLRFML;
RETURN;
;=====================================================
END
;=====================================================