Мегаобучалка Главная | О нас | Обратная связь


Подпрограмма обработки прерываний от таймера TMR 2



2020-03-19 198 Обсуждений (0)
Подпрограмма обработки прерываний от таймера TMR 2 0.00 из 5.00 0 оценок




Данная подпрограмма осуществляет опрос состояния кнопок «+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         ; ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ

;-



2020-03-19 198 Обсуждений (0)
Подпрограмма обработки прерываний от таймера TMR 2 0.00 из 5.00 0 оценок









Обсуждение в статье: Подпрограмма обработки прерываний от таймера TMR 2

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (198)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)