Подпрограмма обработки прерываний от таймера TMR 2
Данная подпрограмма осуществляет опрос состояния кнопок «+1» и «-1» через промежутки времени, определяемые таймером TMR2. Если нажата и удерживается одна из кнопок «+1» и «-1», происходит инкрементирование или декрементирование соответствующих регистров с частотой прерываний от таймера TMR2. При кратковременном нажатии происходит однократное изменение значений регистров. Если ни одна из кнопок «+1» и «-1» не нажата, то таймер TMR2 выключается. Листинг подпрограммы приведен ниже.
;-_TMR2 ; ОБРАБОТЧИК ПРЕРЫВАНИЙ ОТ TMR2 PIR1, TMR2IF ; СБРОСИТЬ ФЛАГ ПРЕРЫВАНИЯ ОТ ТАЙМЕРА TMR2 BCF STATUS, Z COUNTER, W COUNT STATUS, Z ; СЧЕТЧИК ЗАКОНЧИЛ СЧЕТ GOTO DOWN_BUTT ; ДА - ПЕРЕХОД К ПРОВЕРКЕ СОСТОЯНИЙ КНОПОК COUNTER, F ; НЕТ - ИНКРЕМЕНТИРОВАНИЕ СЧЕТЧИКА INT_SOURCE ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ _BUTT ; ПРОВЕРКА СОСТОЯНИЙ КНОПОК ; - FLAG_R, 0 ; РЕЖИМ УСТАНОВКИ ТЕМПЕРАТУРЫ ВКЛЮЧЕН START_TIME ; НЕТ - ПЕРЕХОД К УСТАНОВКЕ ВРЕМЕНИ ВКЛЮЧЕНИЯ PORTB, 6 ; НАЖАТА КНОПКА «+1» M6 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1» MAX_TL ; ИНКРЕМЕНТИРОВАТЬ РЕГИСТР MAX_TL MOVF MAX_TH, W MAX_TH MAX_TH, F MAX_TH, F ; ПРИБАВИТЬ К РЕГИСТРУ MAX_TH ФЛАГ ПЕРЕНОСА STATUS, Z MAX_TL, W TEMP_MAXL ; ЗНАЧЕНИЕ В MAX_TL ДОСТИГЛО TEMP_MAXL BTFSS STATUS, Z M6 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1» BCF STATUS, Z MAX_TH, W TEMP_MAXH ; ЗНАЧЕНИЕ В MAX_TH ДОСТИГЛО TEMP_MAXH BTFSS STATUS, Z M6 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1» STATUS, Z MAX_TH ; ДА - ОБНУЛИТЬ РЕГИСТРЫ MAX_TH И MAX_TL CLRF MAX_TL CALL_BIN_DEC PORTB, 7 ; НАЖАТА КНОПКА «- 1» GOTO STOP_TMR2 ; НЕТ - ПЕРЕХОД К ОСТАНОВКЕ TMR2 MAX_TL ; ДЕКРЕМЕНТИРОВАТЬ РЕГИСТР MAX_TL STATUS, C ; ЕСЛИ БЫЛ ЗАЕМ MAX_TH, W ; ДЕКРЕМЕНТИРОВАТЬ РЕГИСТР MAX_TH BCF STATUS, C STATUS, Z MOVF MAX_TL, F ; ЗНАЧЕНИЕ В MAX_TL ДОСТИГЛО 0 STATUS, Z STOP_TMR2 ; НЕТ - ПЕРЕХОД К ОСТАНОВКЕ TMR2 STATUS, Z MAX_TH, F ; ЗНАЧЕНИЕ В MAX_TH ДОСТИГЛО 0 STATUS, Z STOP_TMR2 ; НЕТ - ПЕРЕХОД К ОСТАНОВКЕ TMR2 BCF STATUS, Z TEMP_MAXL MAX_TL TEMP_MAXH MAX_TH _BIN_DEC MAX_TL, W TEMP_TL MAX_TH, W TEMP_TH CALL BIN_DEC ; ВЫЗОВ ПОДПРОГРАММЫ ДВОИЧНО-ДЕСЯТИЧНОЙ КОРРЕКЦИИ_TMR2 T2CON, TMR2ON; ОСТАНОВКА ТАЙМЕРА TMR2 INT_SOURCE ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ ;-_TIME ; УСТАНОВКА ВРЕМЕНИ ВКЛЮЧЕНИЯ FLAG_R, 1 ; РЕЖИМ УСТАНОВКИ ВРЕМЕНИ ВКЛЮЧЕНИЯ ВКЛЮЧЕН STOP_TIME ; НЕТ - ПЕРЕХОД К УСТАНОВКЕ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ FLAG_R, 5 ; РЕЖИМ УСТАНОВКИ МИНУТ ВКЛЮЧЕН SET_HOUR ; НЕТ - ПЕРЕХОД К УСТАНОВКЕ ЧАСОВ PORTB, 6 ; НАЖАТА КНОПКА «+1» M7 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1»
;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ START_ML, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, Z START_ML, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 0x0A STATUS, Z SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ START_ML ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ START_MH, F ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, Z START_MH, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 6 XORLW 0x06 STATUS, Z GOTO SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ START_MH ; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК МИНУТ SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- PORTB, 7 ; НАЖАТА КНОПКА «- 1» STOP_TMR2_2 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ STATUS, C START_ML, F ; ДЕКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x09 ; ДА - ЗАГРУЗКА НАЧАЛЬНОГО ЗНАЧЕНИЯ START_ML ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ START_MH, F ; ДЕКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x05 ; ДА - ЗАПИСАТЬ НАЧАЛЬНОЕ ЗНАЧЕНИЕ START_MH SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- FLAG_R, 4 ; РЕЖИМ УСТАНОВКИ ЧАСОВ ВКЛЮЧЕН STOP_TMR2_2 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ;- PORTB, 6 ; НАЖАТА КНОПКА «+1» M8 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1» ; СЧЕТЧИКИ ЧАСОВ START_HL, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, Z START_HH, W ; СТАРШИЙ СЧЕТЧИК ДОСЧИТАЛ ДО 2 0x02 STATUS, Z M9 ; НЕТ - ПЕРЕХОД НА ПРОВЕРКУ МЛАДШЕГО СЧЕТЧИКА BCF STATUS, Z START_HL, W 0x04 STATUS, Z M9 STATUS, Z START_HL ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ CLRF START_HH SET_REG_LCD ; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ START_HL, W 0x0A ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 STATUS, Z SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ START_HL ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ START_HH ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ SET_REG_LCD ; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- PORTB, 6 ; НАЖАТА КНОПКА «- 1» STOP_TMR2_2 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2
; СЧЕТЧИК ЕДИНИЦ ЧАСОВ STATUS, C START_HL, F ; ДЕКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x09 ; ДА - ЗАГРУЗИТЬ НАЧАЛЬНОЕ ЗНАЧЕНИЕ START_HL ;- ; СЧЕТЧИК ДЕСЯТКОВ ЧАСОВ START_HH, F ; ДЕКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x02 ; ДА - ЗАГРУЗИТЬ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ В СЧЕТЧИКИ MOVWF START_HH 0x04 MOVWF START_HL SET_REG_LCD ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;-_TMR2_2 T2CON, TMR2ON; ОСТАНОВКА ТАЙМЕРА TMR2 SET_REG_LCD START_ML, W IND_0 START_MH, W IND_1 START_HL, W IND_2 START_HH, W MOVWF IND_3 POINT, 2 ; ВЫКЛЮЧИТЬ ТОЧКУ ВО 2-М РАЗРЯДЕ POINT, 1 ; ВКЛЮЧИТЬ ТОЧКУ В 1-М РАЗРЯДЕ INT_SOURCE ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ ;- ; ПОДПРОГРАММА УСТАНОВКИ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ_TIME ; УСТАНОВКА ВРЕМЕНИ ВЫКЛЮЧЕНИЯ FLAG_R, 2 ; РЕЖИМ УСТАНОВКИ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ ВКЛЮЧЕН CURRENT_TIME; НЕТ - ПЕРЕХОД К УСТАНОВКЕ ТЕКУЩЕГО ВРЕМЕНИ FLAG_R, 5 ; РЕЖИМ УСТАНОВКИ МИНУТ ВКЛЮЧЕН SET_HOUR ; НЕТ - ПЕРЕХОД К УСТАНОВКЕ ЧАСОВ PORTB, 6 ; НАЖАТА КНОПКА «+1» M10 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1»
;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ STOP_ML, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, Z STOP_ML, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 0x0A STATUS, Z SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STOP_ML ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ STOP_MH, F ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, Z STOP_MH, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 6 XORLW 0x06 STATUS, Z GOTO SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STOP_MH ; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК МИНУТ SET_REG_LCD1; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- PORTB, 7 ; НАЖАТА КНОПКА «- 1» STOP_TMR2_3 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ STATUS, C STOP_ML, F ; ДЕКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x09 ; ДА - ЗАГРУЗКА НАЧАЛЬНОГО ЗНАЧЕНИЯ STOP_ML ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ STOP_MH, F ; ДЕКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x05 ; ДА - ЗАПИСАТЬ НАЧАЛЬНОЕ ЗНАЧЕНИЕ STOP_MH SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- FLAG_R, 4 ; РЕЖИМ УСТАНОВКИ ЧАСОВ ВКЛЮЧЕН STOP_TMR2_3 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ;- PORTB, 6 ; НАЖАТА КНОПКА «+1» M11 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1»
; СЧЕТЧИКИ ЧАСОВ STOP_HL, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, Z STOP_HH, W ; СТАРШИЙ СЧЕТЧИК ДОСЧИТАЛ ДО 2 0x02 STATUS, Z M12 ; НЕТ - ПЕРЕХОД НА ПРОВЕРКУ МЛАДШЕГО СЧЕТЧИКА BCF STATUS, Z STOP_HL, W 0x04 STATUS, Z M12 STATUS, Z STOP_HL ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ CLRF STOP_HH SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STOP_HL, W 0x0A ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 STATUS, Z SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STOP_HL ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STOP_HH ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ SET_REG_LCD1; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- PORTB, 6 ; НАЖАТА КНОПКА «- 1» STOP_TMR2_3 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ; СЧЕТЧИК ЕДИНИЦ ЧАСОВ STATUS, C STOP_HL, F ; ДЕКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x09 ; ДА - ЗАГРУЗИТЬ НАЧАЛЬНОЕ ЗНАЧЕНИЕ STOP_HL ;- ; СЧЕТЧИК ДЕСЯТКОВ ЧАСОВ STOP_HH, F ; ДЕКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x02 ; ДА - ЗАГРУЗИТЬ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ В СЧЕТЧИКИ MOVWF STOP_HH 0x04 MOVWF STOP_HL SET_REG_LCD1; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВЫКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;-_TMR2_3 T2CON, TMR2ON; ОСТАНОВКА ТАЙМЕРА TMR2 SET_REG_LCD1 STOP_ML, W IND_0 STOP_MH, W IND_1 STOP_HL, W IND_2 STOP_HH, W MOVWF IND_3 POINT, 2 ; ВЫКЛЮЧИТЬ ТОЧКУ ВО 2-М РАЗРЯДЕ POINT, 1 ; ВКЛЮЧИТЬ ТОЧКУ В 1-М РАЗРЯДЕ INT_SOURCE ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ ;-
; ПОДПРОГРАММА УСТАНОВКИ ТЕКУЩЕГО ВРЕМЕНИ_TIME ; УСТАНОВКА ТЕКУЩЕГО ВРЕМЕНИ FLAG_R, 2 ; РЕЖИМ УСТАНОВКИ ТЕКУЩЕГО ВРЕМЕНИ ВКЛЮЧЕН INT_SOURCE ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ FLAG_R, 5 ; РЕЖИМ УСТАНОВКИ МИНУТ ВКЛЮЧЕН SET_HOUR ; НЕТ - ПЕРЕХОД К УСТАНОВКЕ ЧАСОВ PORTB, 6 ; НАЖАТА КНОПКА «+1» M13 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1»
;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ MIN_L, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, Z MIN_L, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 0x0A STATUS, Z SET_REG_LCD2; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ MIN_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ MIN_H, F ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, Z MIN_H, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 6 XORLW 0x06 STATUS, Z GOTO SET_REG_LCD2; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ MIN_H ; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК МИНУТ SET_REG_LCD2; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ ;- PORTB, 7 ; НАЖАТА КНОПКА «- 1» STOP_TMR2_4 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ STATUS, C MIN_L, F ; ДЕКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD2; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ STATUS, C 0x09 ; ДА - ЗАГРУЗКА НАЧАЛЬНОГО ЗНАЧЕНИЯ MIN_L ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ MIN_H, F ; ДЕКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD2; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ STATUS, C 0x05 ; ДА - ЗАПИСАТЬ НАЧАЛЬНОЕ ЗНАЧЕНИЕ MIN_H SET_REG_LCD2; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ; ВЫВОДОМ ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- FLAG_R, 4 ; РЕЖИМ УСТАНОВКИ ЧАСОВ ВКЛЮЧЕН STOP_TMR2_4 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОСТАНОВКИ ТАЙМЕРА TMR2 ;- PORTB, 6 ; НАЖАТА КНОПКА «+1» M14 ; НЕТ - ПЕРЕХОД К ПРОВЕРКЕ НАЖАТИЯ КНОПКИ «- 1» _HOUR ; СЧЕТЧИКИ ЧАСОВ HOUR_L, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, Z HOUR_H, W ; СТАРШИЙ СЧЕТЧИК ДОСЧИТАЛ ДО 2 0x02 STATUS, Z M15 ; НЕТ - ПЕРЕХОД НА ПРОВЕРКУ МЛАДШЕГО СЧЕТЧИКА BCF STATUS, Z HOUR_L, W 0x04 STATUS, Z M15 STATUS, Z HOUR_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ CLRF HOUR_H SET_REG_LCD2 ; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ HOUR_L, W 0x0A ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 STATUS, Z SET_REG_LCD2 ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ; ВЫВОДОМ ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ HOUR_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ HOUR_H ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ SET_REG_LCD2 ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ; ВЫВОДОМ ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;- PORTB, 6 ; НАЖАТА КНОПКА «- 1» SET_REG_LCD2 ; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ; СЧЕТЧИК ЕДИНИЦ ЧАСОВ STATUS, C HOUR_L, F ; ДЕКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD2 ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ; ВЫВОДОМ ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x09 ; ДА - ЗАГРУЗИТЬ НАЧАЛЬНОЕ ЗНАЧЕНИЕ HOUR_L ;- ; СЧЕТЧИК ДЕСЯТКОВ ЧАСОВ HOUR_H, F ; ДЕКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ STATUS, C ; ПРОИЗОШЕЛ ЗАЕМ SET_REG_LCD2 ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ; ВЫВОДОМ ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ STATUS, C 0x02 ; ДА - ЗАГРУЗИТЬ НАЧАЛЬНЫЕ ЗНАЧЕНИЯ В СЧЕТЧИКИ MOVWF HOUR_H 0x04 MOVWF HOUR_L SET_REG_LCD2 ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ; ВЫВОДОМ ВРЕМЕНИ ВКЛЮЧЕНИЯ НА ИНДИКАЦИЮ ;-_TMR2_4 T2CON, TMR2ON ; ОСТАНОВКА ТАЙМЕРА TMR2 SET_REG_LCD2 MIN_L, W IND_0 MIN_H, W IND_1 HOUR_L, W IND_2 HOUR_H, W MOVWF IND_3 POINT, 2 ; ВЫКЛЮЧИТЬ ТОЧКУ ВО 2-М РАЗРЯДЕ POINT, 1 ; ВКЛЮЧИТЬ ТОЧКУ В 1-М РАЗРЯДЕ INT_SOURCE ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ ;-
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (198)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |