RETLWB'11101100';2
RETLWB'10101110';3
RETLWB'00110110';4
RETLWB'10111010';5
RETLWB'11111010';6
RETLWB'00001110';7
RETLWB'11111110';8
RETLWB'10111110';9
RETLWB'00000000';10-> ПУСТО.
RETLWB'00100000';11-> ПРОЧЕРК.
RETLWB'10000000';12-> ПРОЧЕРК.
;=================================================
; 4. ТАБЛИЦА ПЕРЕКОДИРОВКИ КУРСОРА.
KYPCY
MOVFWKYPC;
ADDWFPCL,1;
RETURN;НЕТ КУРСОРА.
RETLWB'00000100';3
RETLWB'00001000';4
RETLWB'00010000';5
RETLWB'00100000';6
RETLWB'01000000';7
;===================================================
; 5. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
VUBOR
MOVFWPEID;ИЗМЕНЯЕМ РЕЖИМ ИНДИКАЦИИ.
GOTOINDH;ИНДИКАЦИЯ ЧАСОВ.
GOTOINDT;ТАЙМЕРА.
GOTOINDU;НАПРЯЖЕНИЯ.
;======================================================
; 6. ВЫБОР РАЗРЯДА УСТАНОВКИ.
YCT
BTFSCPORTA,YC;ЕСЛИ КНОПКА "РЕЖИМ" НАЖАТА,
RETURN
MOVFWKYPC;ТО ПО КУРСОРУ
ADDWFPCL,1;ВЫБИРАЕМ РАЗРЯД УСТАНОВКИ.
GOTOYC0;МИНУТЫ.
GOTOYC1;ДЕСЯТКИ МИНУТ.
GOTOYCE;ОБНУЛЕНИЕ.
GOTOYC2;ЧАСЫ.
GOTOYC3;ДЕСЯТКИ ЧАСОВ.
;=====================================================
; 7. ТАБЛИЦЫ ПЕРЕВОДА ДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.
DEBIN
RETLW.0
RETLW.10
RETLW.20
RETLW.30
RETLW.40
RETLW.50
RETLW.60
RETLW.70
RETLW.80
RETLW.90
; 8. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
KHOP
BTFSSFLAG,1;ЕСЛИ НЕТ РЕЖИМА ЧАСОВ,
GOTO$+5;ТО КУРСОР НЕ МЕНЯЕТСЯ.
BTFSSPORTA,KY;ПРИ НАЖАТОЙ КНОПКЕ
CALLKYPCOP;ИДЕМ НА УСТАНОВКУ КУРСОРА.
BTFSCFLAG,7;ЕСЛИ ИДЕТ УСТАНОВКА,
GOTOVUBOR;ТО РЕЖИМ НЕ МЕНЯЕТСЯ.
GOTOVUBOR;ИЛИ ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
INCFPEID,1;ИЗМЕНЕНИЕ РЕЖИМА ИНДИКАЦИИ.
MOVLW.3;3 РЕЖИМОВ ИНДИКАЦИИ.
SUBWFPEID,0;ЕСЛИ БОЛЬШЕ,
BTFSSSTATUS,2;ТО ПОЙДЕМ НА СБРОС.
GOTOVUBOR;НА ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
CLRFPEID;СБРОС РЕЖИМА.
GOTOVUBOR;НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
; 9. УСТАНОВКА КУРСОРА (ВЫБОР РАЗРЯДА УСТАНОВКИ).
KYPCOP
BSFFLAG,7;УСТАНОВКА.
BCFFLAG,4;СБРОС ФЛАГА НЕТ КУРСОРА.
INCFKYPC,1;ПРИБАВИМ ЕДИНИЦУ В КУРСОР.
MOVLW.6;НЕ БОЛЕЕ 5.
SUBWFKYPC,0;
SKPC;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 6,
RETURN;
CLRFKYPC;ОБНУЛИМ.
BSFFLAG,4;НЕТ КУРСОРА В ПОЛЕ.
BCFFLAG,7;НЕТ УСТАНОВКИ.
;=========================================
; 10. ВВОД КУРСОРА В МЛ. РАЗРЯД РЕГИСТРОВ.
KYPVO
BTFSCFLAG,4;ЕСЛИ НЕТ КУРСОРА,
RETURN;ТО ВЕРНЕМСЯ.
CALLKYPCY;УСТАНОВИМ РЕЖИМЫ.
MOVWFKYPCI;В КУРСОР ИНДИКАЦИИ.
RRFKYPCI,1;ЗАПОЛНИМ БИТ "С".
ADDCFR1,1;ПЕРЕНЕСЕМ В РЕГИСТР ИНДИКАЦИИ.
ADDCFR2,1;ПЕРЕНЕСЕМ В РЕГИСТР ИНДИКАЦИИ.
RRFKYPCI,1;ОСТАЛЬНЫЕ РЕГИСТРЫ
ADDCFR3,1;ЗАПОЛНЯЕМ АНАЛОГИЧНО.
RRFKYPCI,1;
ADDCFR4,1;
ADDCFR5,1;
ADDCFR6,1;
ADDCFR7,1;
ADDCFR8,1;
;=============================================
; 11. ВЫВОД НА ИНДИКАЦИЮ.
IND
CALLKYPVO;ВВЕДЕМ КУРСОРЫ В РЕГИСТРЫ ИНДИКАЦИИ.
MOVFWZPT;ЗНАЧЕНИЯ ЗАПЯТЫХ ПЕРЕПИШЕМ
MOVWFTZPT;ВО ВРЕМЕННЫЙ РЕГИСТР.
BSFFLAG1,2;ЗАПЯТАЯ ПЕРЕДАНА.
BCFPORTC,DIN;ДАННЫЕ РАВНЫ НУЛЮ.
BCFPORTC,LOAD;НАЧАЛО ПЕРЕДАЧИ (LOAD=0).
RRFTZPT,1;ВЫТОЛКНЕМ ОЧЕРЕДНУЮ ЗАПЯТУЮ.
CALLVUV0;
BCFFLAG1,2;ЗАПЯТАЯ ПЕРЕДАНА.
MOVLWR1;ЗАПИШЕМ АДРЕС ПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.
MOVWFFSR;
MOVFWINDF;ЗНАЧЕНИЕ ПЕРВОГО РЕГИСТРА
MOVWFTEMP;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
CALLVUVOD;НА ВЫВОД.
POVT
INCFFSR,1;УВЕЛИЧИМ АДРЕС РЕГИСТРА ИНДИКАЦИИ.
MOVFWINDF;ПЕРЕПИШЕМ ЕГО ЗНАЧЕНИЕ
MOVWFTEMP;ВО ВРЕМЕННЫЙ.
INCFCOUZ,1;ПОДСЧИТАЕМ ЧИСЛО
MOVLW.7;ПЕРЕДАВАЕМЫХ
SUBWFCOUZ,0;ЗАПЯТЫХ.
BTFSCSTATUS,2;
CLRFCOUZ;ОБНУЛИМ СЧЕТЧИК.
BTFSSSTATUS,2;
GOTOPOVT;ПОВТОРИМ ВЫВОД.
BSFPORTC,LOAD;КОНЕЦ ПЕРЕДАЧИ.
CUNX
BSFPORTC,DCLK;СИНХРОТМПУЛЬС = 1.
CALLPAUS;ПАУЗА.
BCFPORTC,DCLK;СИНХРОИМПУЛЬС = 0.
RETURN;ВОЗВРАТ.
PAUS
MOVLW .5;МОЖНО ПОДБИРАТЬ ЗНАЧЕНИЕ ПАУЗЫ.
ADDLW -1;ПАУЗА = ЧИСЛО Х 4 МКС.
BTFSS STATUS,2;
GOTO $-2;ПОВТОРИМ.
RETURN;ВЕРНЕМСЯ.
VUVOD
RRFTEMP,1;СДВИНЕМ ВПРАВО.
VUV0
BTFSSSTATUS,0;ПО НУЛЕВОМУ РАЗРЯДУ
BCFPORTC,DIN;УСТАНАВЛИВАЕМ ДАННЫЕ
BTFSCSTATUS,0;В 0 ИЛИ 1.
BSFPORTC,DIN;
CALLCUNX;СИНХРОНИЗИРУЕМ ДАННЫЕ.
BTFSCFLAG1,2;ЕСЛИ ЗАПЯТАЯ ПЕРЕДАНА,
INCFCOU,1;ПОДСЧИТАЕМ ЧИСЛО БИТ.
MOVLW.8;
SUBWFCOU,0;
BTFSSSTATUS,2;ЕСЛИ НЕ ВСЕ БИТЫ ПЕРЕДАНЫ,
GOTOVUVOD;ПОВТОРИМ ВЫВОД.
CLRFCOU;ОБНУЛИМ СЧЕТЧИК.
; 12. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
PRER
MOVWFWTEMP;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W,
MOVFWSTATUS;STATUS,
MOVWFSTEMP;
MOVFWFSR;FSR.
MOVWFFTEMP;
BSFFLAG1,1;1 СЕК ЦИКЛА.
CALLS1;ПОДСЧИТАЕМ ВРЕМЯ.
BTFSCFLAG,2;
CALLTAIM;
REPER ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
MOVFWSTEMP;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWFSTATUS;STATUS,
MOVFWFTEMP;
MOVWFFSR;FSR,
MOVFWWTEMP;W.
BCFINTCON,2;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0.
RETFIE;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 13. ПОДСЧЕТ ВРЕМЕНИ.
S1
BTFSCFLAG1,5;
GOTO$+8;
BTFSSFLAG1,4;
GOTO$+6;
BTFSCPORTC,0;СМЕНА ВКЛЮЧЕНИЯ ЗУММЕРА.
GOTO$+3;
BSFPORTC,0;ВКЛЮЧИМ СИГНАЛ.
GOTO$+2;
BCFPORTC,0;
MOVLW.9;ЕСЛИ УЖЕ 9 СЕКУНД,
SUBWFCL,0;
BCSH;ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ СЕКУНД.
INCFCL,1;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
SH
CLRFCL;ОБНУЛИМ СЕКУНДЫ.
MOVFWCH;ЕСЛИ ДЕСЯТКИ СЕКУНД
ADDLW-5H;РАВНЫ 5,
BZMIL;ИДЕМ СРАВНИВАТЬ МИНУТЫ.
INCFCH,1;ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ СЕКУНД.
MIL
CLRFCH;ОБНУЛИМ ДЕСЯТКИ СЕКУНД.
MOVFWML;ЕСЛИ ЕДИНИЦЫ МИНУТ
ADDLW-9H;РАВНЫ 9,
BZMIH;ИДЕМ СРАВНИВАТЬ ДЕСЯТКИ.
INCFML,1;ИНАЧЕ УВЕЛИЧИМ МИНУТЫ.
MIH
BSFFLAG1,4;ПРОШЛО 10 МИНУТ КУРСОР ВЫКЛЮЧАЕТСЯ.
CLRFKYPC;НЕТ КУРСОРА.
CLRFML;ОБНУЛИМ ЕДИНИЦЫ МИНУТ.
MOVFWMH;ЕСЛИ ДЕСЯТКИ МИНУТ
Страницы: 1, 2, 3, 4, 5, 6