Управление барокамерой

Курсовой проект - Компьютеры, программирование

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

О РАЗРЯДА ИНДИКАЦИИ

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

;--------------------------------------------------