Управление барокамерой
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
О РАЗРЯДА ИНДИКАЦИИ
BANC1SSPBUFSSPSTAT,BF
GOTO$-1IND_1,W;ПЕРЕДАТЬ СОДЕРЖИМОЕ 1-ГО РАЗРЯДА ИНДИКАЦИИ
BANC1SSPBUFSSPSTAT,BF
GOTO$-1IND_0,W;ПЕРЕДАТЬ СОДЕРЖИМОЕ 0-ГО РАЗРЯДА ИНДИКАЦИИ
BANC1SSPBUFSSPSTAT,BF
GOTO$-1POINT,W;ПЕРЕДАТЬ СОСТОЯНИЕ ДЕЦИМАЛЬНОЙ ТОЧКИSSPCON2,ACKSTAT$-1SSPCON2,PEN;СГЕНЕРИРОВАТЬ БИТ STOPEND_INT;ПЕРЕХОД НА НАЧАЛО ПРОГРАММЫ
;--------------------------------------------------------------------------
2.9 Подпрограмма двоично-десятичной коррекции
Данная подпрограмма осуществляет конвертирование двоичного кода, предварительно записанного в буферных регистрах TEMP_TL TEMP_TH в двоично-десятичный код, записываемый в регистры индикации IND_0, IND_1, IND_2, IND_3.
Листинг подпрограммы приведен ниже.
;---------------------------------------------------------------------------_DEC;ПОДПРОГРАММА ДВОИЧНО-ДЕСЯТИЧНОЙ КОРРЕКЦИИ
;---------------------------------------------------------------------------
;РАСПРЕДЕЛЕНИЕ ТЕТРАД РЕГИСТРОВ TEMP_TL И TEMP_TH ПО РЕГИСТРАМ IND_0 - IND_3
MOVFTEMP_TL,W0x0F
MOVWFIND_0;ПОМЕСТИТЬ МЛАДШУЮ ТЕТРАДУ TEMP_TL В IND_0
SWAPFTEMP_TL,W0x0F
MOVWFIND_1;ПОМЕСТИТЬ СТАРШУЮ ТЕТРАДУ TEMP_TL В IND_1
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.
.Подпрограмма восстановления контекста.
2.10.1 Подпрограмма сохранения контекста
При переходе на обработку прерываний необходимо сохранять текущее содержимое аккумулятора и регистра 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
;-----------------------------------------------------------------
2.10.2 Подпрограмма определения источника прерывания
Данная подпрограмма по состоянию флагов прерываний в регистрах 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;ИНАЧЕ ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ
;КОНТЕКСТА
;-----------------------------------------------------------------
2.10.3 Подпрограмма часов
Данная подпрограмма осуществляет счет и вывод на индикацию (в случае включения режима отображения текущего времени) текущего времени. Кроме того подпрограмма проверяет совпадение текущего времени с временем начала и поддержания температуры. В случае их совпадения подпрограмма включает либо выключает режим поддержания температуры. Для счета используется 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
;--------------------------------------------------