Микропроцессорныая система. Автоматический чайник

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

;

MOVFTEMP_TH, W0x0F

MOVWFIND_2; ПОМЕСТИТЬ МЛАДШУЮ ТЕТРАДУ TEMP_TH В IND_2

 

SWAPFTEMP_TH, W0x0F

MOVWFIND_3; ПОМЕСТИТЬ СТАРШУЮ ТЕТРАДУ TEMP_TH В IND_3

;-

; КОРРЕКЦИЯ РЕЗУЛЬТАТАSTATUS, ZSTATUS, C

MOVLW0x0AIND_0, WSTATUS, C

GOTO$+5STATUS, Z; ЕСЛИ ЗНАЧЕНИЕ IND_0 НЕ МЕНЬШЕ 0x0A$+3IND_0; В РЕГИСТР IND_0 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И

; 0x0AIND_1, F; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_1

 

BCFSTATUS, ZSTATUS, C

MOVLW0x0A; ИНАЧЕ ЗНАЧЕНИЯ РЕГИСТРОВ ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ

SUBWFIND_1, WSTATUS, C

GOTO$+5STATUS, Z; ЕСЛИ ЗНАЧЕНИЕ IND_1 НЕ МЕНЬШЕ 0x0A$+3IND_1; В РЕГИСТР IND_1 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И

; 0x0AIND_2, F; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_2

 

BCFSTATUS, ZSTATUS, C

MOVLW0x0A; ИНАЧЕ ЗНАЧЕНИЯ РЕГИСТРОВ ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ

SUBWFIND_2, WSTATUS, C

GOTO$+5STATUS, Z; ЕСЛИ ЗНАЧЕНИЕ IND_2 НЕ МЕНЬШЕ 0x0A$+3IND_2; В РЕГИСТР IND_2 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И

; 0x0AIND_3, F; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_3

;-

 

2.10 Обработка прерываний

 

Вектор прерываний находится по адресу 0х04.

Обработчик прерываний включает в себя следующие подпрограммы:

1.Подпрограмма сохранения контекста.

2.Подпрограмма определения источника прерывания.

.Подпрограмма часов.

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

.Подпрограмма обработки прерываний по входу INT.

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

.Подпрограмма приема / передачи данных через USART.

.Подпрограмма восстановления контекста.

Подпрограмма сохранения контекста

При переходе на обработку прерываний необходимо сохранять текущее содержимое аккумулятора и регистра STATUS, чтобы при возврате из прерывания программа могла продолжать нормальную работу.

Ниже приведен листинг подпрограммы, осуществляющей сохранение контекста во временные регистры W_TEMP и STATUS_TEMP. Регистр STATUS_TEMP определен в 0-м банке по адресу 0х39, а регистр W_TEMP - в 0-м банке по адресу 0х3А и в 1-м банке по адресу 0хВА.

 

;-

; СОХРАНЕНИЕ АККУМУЛЯТОРА И РЕГИСТРА STATUSSTATUS, RP0; ОПРЕДЕЛЕНИЕ ТЕКУЩЕГО БАНКАRP0_CLRSTATUS, RP0; УСТАНОВИТЬ БАНК 0W_TEMP; СОХРАНИТЬ АККУМУЛЯТОРSTATUS, WSTATUS_TEMP; СОХРАНИТЬ РЕГИСТР STATUSSTATUS_TEMP, 5; ВОССТАНОВИТЬ ЗНАЧЕНИЕ БИТА RP0$+4_CLRW_TEMP; СОХРАНИТЬ АККУМУЛЯТОР

SWAPFSTATUS, WSTATUS_TEMP; СОХРАНИТЬ РЕГИСТР STATUS

;-

 

Подпрограмма определения источника прерывания

Данная подпрограмма по состоянию флагов прерываний в регистрах PIR1 и INTCON определяет источник прерывания и осуществляет вызов соответствующей подпрограммы обработки.

Листинг подпрограммы приведен ниже.

 

;-

; ОПРЕДЕЛЕНИЕ ИСТОЧНИКА ПРЕРЫВАНИЯ

INT_SOURCESTATUS; ОЧИСТИТЬ РЕГИСТР STATUS

BTFSCPIR1, CCP1IF; ЕСЛИ ПРЕРЫВАНИЕ ОТ МОДУЛЯ CCP1CLOCK; ПЕРЕХОД НА ПОДПРОГРАММУ ЧАСОВ

PIR1, TMR2IF; ЕСЛИ ПРЕРЫВАНИЕ ОТ ТАЙМЕРА TMR2INT_TMR2; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ОТ

; TMR2

INTCON, INTF; ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДУ INTINT_INT; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ПО

; INT

INTCON, RBIF; ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДАМ INT_RB; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ПО

; ВХОДАМ PIR1, RCIF; ЕСЛИ ПРЕРЫВАНИЕ ОТ ПРИЕМНИКА USARTSERIAL_PRT; ПЕРЕХОД НА ПОДПРОГРАММУ ПРИЕМА/ПЕРЕДАЧИ

; ДАННЫХ ЧЕРЕЗ USARTEND_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; СЧЕТЧИК ДОСЧИТАЛ ДО 100x0ASTATUS, ZCURR_TIME; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ

; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮSEC_L; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК СЕКУНД

;-

; СЧЕТЧИК ДЕСЯТКОВ СЕКУНДSEC_H, F; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК СЕКУНДSTATUS, ZSEC_H, W; СЧЕТЧИК ДОСЧИТАЛ ДО 60x06STATUS, ZCURR_TIME; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ

; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮSEC_H; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК СЕКУНД

;-

; СЧЕТЧИК ЕДИНИЦ МИНУТMIN_L, F; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК МИНУТSTATUS, ZMIN_L, W; СЧЕТЧИК ДОСЧИТАЛ ДО 100x0ASTATUS, ZCURR_TIME; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ

; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮMIN_L; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК МИНУТ

;-

; СЧЕТЧИК ДЕСЯТКОВ МИНУТMIN_H, F; ИНКРЕМЕНТИРОВАТЬ СТАРШИЙ СЧЕТЧИК МИНУТSTATUS, ZMIN_H, W; СЧЕТЧИК ДОСЧИТАЛ ДО 6

XORLW0x06STATUS, Z

GOTOCURR_TIME; НЕТ - ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ

; ТЕКУЩЕГО ВРЕМЕНИ НА ИНДИКАЦИЮMIN_H; ДА - ОЧИСТИТЬ СТАРШИЙ СЧЕТЧИК МИНУТ

;-

; СЧЕТЧИКИ ЧАСОВHOUR_L, F; ИНКРЕМЕНТИРОВАТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВSTATUS, ZHOUR_H, W; СТАРШИЙ СЧЕТЧИК ДОСЧИТАЛ ДО 20x02STATUS, ZM3; НЕТ - ПЕРЕХОД НА ПРОВЕРКУ МЛАДШЕГО СЧЕТЧИКА

BCFSTATUS, ZHOUR_L, W0x04STATUS, ZM3STATUS, ZHOUR_L; ДА - ОЧИСТИТЬ МЛАДШИЙ СЧЕТЧИК ЧАСОВ

CLRFHOUR_HCURR_TIME; ПЕРЕХОД НА ПОДПРОГРАММУ УПРАВЛЕНИЯ ВЫВОДОМ

; ?/p>