Подпрограмма двоично-десятичной коррекции
Данная подпрограмма осуществляет конвертирование двоичного кода, предварительно записанного в буферных регистрах TEMP_TL TEMP_TH в двоично-десятичный код, записываемый в регистры индикации IND_0, IND_1, IND_2, IND_3. Листинг подпрограммы приведен ниже.
;-_DEC ; ПОДПРОГРАММА ДВОИЧНО-ДЕСЯТИЧНОЙ КОРРЕКЦИИ ;- ; РАСПРЕДЕЛЕНИЕ ТЕТРАД РЕГИСТРОВ TEMP_TL И TEMP_TH ПО РЕГИСТРАМ IND_0 - IND_3 MOVF TEMP_TL, W 0x0F MOVWF IND_0 ; ПОМЕСТИТЬ МЛАДШУЮ ТЕТРАДУ TEMP_TL В IND_0
SWAPF TEMP_TL, W 0x0F MOVWF IND_1 ; ПОМЕСТИТЬ СТАРШУЮ ТЕТРАДУ TEMP_TL В IND_1
MOVF TEMP_TH, W 0x0F MOVWF IND_2 ; ПОМЕСТИТЬ МЛАДШУЮ ТЕТРАДУ TEMP_TH В IND_2
SWAPF TEMP_TH, W 0x0F MOVWF IND_3 ; ПОМЕСТИТЬ СТАРШУЮ ТЕТРАДУ TEMP_TH В IND_3 ;- ; КОРРЕКЦИЯ РЕЗУЛЬТАТА STATUS, Z STATUS, C MOVLW 0x0A IND_0, W STATUS, C GOTO $+5 STATUS, Z ; ЕСЛИ ЗНАЧЕНИЕ IND_0 НЕ МЕНЬШЕ 0x0A $+3 IND_0 ; В РЕГИСТР IND_0 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И ; 0x0A IND_1, F ; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_1
BCF STATUS, Z STATUS, C MOVLW 0x0A ; ИНАЧЕ ЗНАЧЕНИЯ РЕГИСТРОВ ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ SUBWF IND_1, W STATUS, C GOTO $+5 STATUS, Z ; ЕСЛИ ЗНАЧЕНИЕ IND_1 НЕ МЕНЬШЕ 0x0A $+3 IND_1 ; В РЕГИСТР IND_1 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И ; 0x0A IND_2, F ; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_2
BCF STATUS, Z STATUS, C MOVLW 0x0A ; ИНАЧЕ ЗНАЧЕНИЯ РЕГИСТРОВ ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ SUBWF IND_2, W STATUS, C GOTO $+5 STATUS, Z ; ЕСЛИ ЗНАЧЕНИЕ IND_2 НЕ МЕНЬШЕ 0x0A $+3 IND_2 ; В РЕГИСТР IND_2 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И ; 0x0A IND_3, F ; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_3 ;-
Обработка прерываний Вектор прерываний находится по адресу 0х04. Обработчик прерываний включает в себя следующие подпрограммы: 1. Подпрограмма сохранения контекста. 2. Подпрограмма определения источника прерывания. . Подпрограмма часов. . Подпрограмма обработки прерываний от таймера TMR2. . Подпрограмма обработки прерываний по входу INT. . Подпрограмма обработки прерываний по входам <RB4: RB7>. . Подпрограмма приема / передачи данных через USART. . Подпрограмма восстановления контекста. Подпрограмма сохранения контекста При переходе на обработку прерываний необходимо сохранять текущее содержимое аккумулятора и регистра STATUS, чтобы при возврате из прерывания программа могла продолжать нормальную работу. Ниже приведен листинг подпрограммы, осуществляющей сохранение контекста во временные регистры W_TEMP и STATUS_TEMP. Регистр STATUS_TEMP определен в 0-м банке по адресу 0х39, а регистр W_TEMP - в 0-м банке по адресу 0х3А и в 1-м банке по адресу 0хВА.
;- ; СОХРАНЕНИЕ АККУМУЛЯТОРА И РЕГИСТРА STATUS STATUS, RP0 ; ОПРЕДЕЛЕНИЕ ТЕКУЩЕГО БАНКА RP0_CLR STATUS, RP0 ; УСТАНОВИТЬ БАНК 0 W_TEMP ; СОХРАНИТЬ АККУМУЛЯТОР STATUS, W STATUS_TEMP ; СОХРАНИТЬ РЕГИСТР STATUS STATUS_TEMP, 5 ; ВОССТАНОВИТЬ ЗНАЧЕНИЕ БИТА RP0 $+4_CLR W_TEMP ; СОХРАНИТЬ АККУМУЛЯТОР SWAPF STATUS, W STATUS_TEMP ; СОХРАНИТЬ РЕГИСТР STATUS ;- Подпрограмма определения источника прерывания Данная подпрограмма по состоянию флагов прерываний в регистрах PIR1 и INTCON определяет источник прерывания и осуществляет вызов соответствующей подпрограммы обработки. Листинг подпрограммы приведен ниже.
;- ; ОПРЕДЕЛЕНИЕ ИСТОЧНИКА ПРЕРЫВАНИЯ INT_SOURCE STATUS ; ОЧИСТИТЬ РЕГИСТР STATUS BTFSC PIR1, CCP1IF ; ЕСЛИ ПРЕРЫВАНИЕ ОТ МОДУЛЯ CCP1 CLOCK ; ПЕРЕХОД НА ПОДПРОГРАММУ ЧАСОВ PIR1, TMR2IF ; ЕСЛИ ПРЕРЫВАНИЕ ОТ ТАЙМЕРА TMR2 INT_TMR2 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ОТ ; TMR2 INTCON, INTF ; ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДУ INT INT_INT ; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ПО ; INT INTCON, RBIF ; ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДАМ <RB4:RB7> INT_RB ; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ПО ; ВХОДАМ <RB4:RB7> PIR1, RCIF ; ЕСЛИ ПРЕРЫВАНИЕ ОТ ПРИЕМНИКА USART SERIAL_PRT ; ПЕРЕХОД НА ПОДПРОГРАММУ ПРИЕМА/ПЕРЕДАЧИ ; ДАННЫХ ЧЕРЕЗ USART END_INT ; ИНАЧЕ ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ ; КОНТЕКСТА ;-
Подпрограмма часов Данная подпрограмма осуществляет счет и вывод на индикацию (в случае включения режима отображения текущего времени) текущего времени. Кроме того подпрограмма проверяет совпадение текущего времени с временем начала и поддержания температуры. В случае их совпадения подпрограмма включает либо выключает режим поддержания температуры. Для счета используется 6 регистров-счетчиков: SEC_L - счетчик единиц секунд; SEC_H - счетчик десятков секунд; MIN_L - счетчик единиц минут; MIN_H - счетчик десятков минут; HOUR_L - счетчик единиц часов; HOUR_H - счетчик десятков часов. Счетчики SEC_L, MIN_L, HOUR_L инкрементируются от 0х00 до 0х0А. При достижении 0х0А счетчики сбрасываются. Счетчики SEC_H и MIN_H инкрементируются от 0х00 до 0х06. При достижении 0х06 счетчики сбрасываются. Счетчик HOUR_H инкрементируется от 0х00 до 0х02. Счетчик сбрасывается, когда в нем записано значение 0х02, а счетчик HOUR_L досчитал до 0х04. Листинг подпрограммы часов приведен ниже. ;- ; ПОДПРОГРАММА ТАЙМЕРА PIR1, CCP1IF ; СБРОСИТЬ ФЛАГ ПРЕРЫВАНИЯ ОТ МОДУЛЯ CCP1 ;- ; СЧЕТЧИК ЕДИНИЦ СЕКУНД SEC_L, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК СЕКУНД SEC_L, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 0x0A STATUS, Z CURR_TIME ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ SEC_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК СЕКУНД ;- ; СЧЕТЧИК ДЕСЯТКОВ СЕКУНД SEC_H, F ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК СЕКУНД STATUS, Z SEC_H, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 6 0x06 STATUS, Z CURR_TIME ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ SEC_H ; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК СЕКУНД ;- ; СЧЕТЧИК ЕДИНИЦ МИНУТ MIN_L, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ STATUS, Z MIN_L, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 0x0A STATUS, Z CURR_TIME ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ MIN_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ ;- ; СЧЕТЧИК ДЕСЯТКОВ МИНУТ MIN_H, F ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТ STATUS, Z MIN_H, W ; СЧЕТЧИК ДОСЧИТАЛ ДО 6 XORLW 0x06 STATUS, Z GOTO CURR_TIME ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ MIN_H ; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК МИНУТ ;- ; СЧЕТЧИКИ ЧАСОВ HOUR_L, F ; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ STATUS, Z HOUR_H, W ; СТАРШИЙ СЧЕТЧИК ДОСЧИТАЛ ДО 2 0x02 STATUS, Z M3 ; НЕТ - ПЕРЕХОД НА ПРОВЕРКУ МЛАДШЕГО СЧЕТЧИКА BCF STATUS, Z HOUR_L, W 0x04 STATUS, Z M3 STATUS, Z HOUR_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ CLRF HOUR_H CURR_TIME ; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ HOUR_L, W 0x0A ; СЧЕТЧИК ДОСЧИТАЛ ДО 10 STATUS, Z CURR_TIME ; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ ; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮ HOUR_L ; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ HOUR_H ; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК ЧАСОВ ;-_TIME ; ПОДПРОГРАММА УПРАВЛЕНИЯ ВЫВОДОМ ТЕКУЩЕГО ; ВРЕМЕНИ НА ИНДИКАЦИЮ ;- ; ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РЕЖИМА ПОДДЕРЖАНИЯ ТЕМПЕРАТУРЫ BCF STATUS, Z START_ML, W MIN_L, W STATUS, Z M4 STATUS, Z START_MH, W MIN_H, W STATUS, Z M4 STATUS, Z START_HL, W HOUR_L, W STATUS, Z M4 STATUS, Z START_HH, W HOUR_H, W STATUS, Z M4 FLAG_R1,0 STATUS, Z STOP_ML, W MIN_L, W STATUS, Z M5 STATUS, Z STOP_MH, W MIN_H, W STATUS, Z M5 STATUS, Z STOP_HL, W HOUR_L, W STATUS, Z M5 STATUS, Z STOP_HH, W HOUR_H, W STATUS, Z M5 FLAG_R1,0 ;- FLAG_R, 6 ; ВКЛЮЧЕН РЕЖИМ ОТОБРАЖЕНИЯ ТЕКУЩЕГО ВРЕМЕНИ INT_SOURCE ; НЕТ - ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ ; - ; ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РАЗДЕЛЯЮЩЕЙ ТОЧКИ POINT, 2 POINT, 1 ; ДЕЦИМАЛЬНАЯ ТОЧКА ВКЛЮЧЕНА $+3 POINT, 1 ; ДА - ВЫКЛЮЧИТЬ ТОЧКУ $+2 POINT, 1 ; НЕТ - ВКЛЮЧИТЬ ТОЧКУ ; - MOVF MIN_L, W IND_0 MIN_H, W IND_1 HOUR_L, W IND_2 HOUR_H, W IND_3 GOTO INT_SOURCE ; НЕТ - ВЕРНУТЬСЯ К ПОИСКУ ИСТОЧНИКОВ ПРЕРЫВАНИЙ ;-
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (162)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |