Itnewsrussia.ru

Анализ современных технологий

Подпрограмма двоично-десятичной коррекции

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 ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ Перейти на страницу: 1 2 3 4 5 6 7 8

Популярное:

Вакуумные и плазменные приборы Спроектировать электронно-оптическую систему осциллографической трубки. Исходные данные к проекту: . Ускоряющее напряжение - 5 кВ. . Ток эмиссии катода - 1 мА. . Диаметр луча на экране - 0,5 мм. . Развертка луча - линейная. . Угол отклонения луча - 200. Напряжение, В 6.3 ...