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

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

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

ритма обработки прерываний (продолжение)

 

Рисунок 14 - Блок-схема алгоритма обработки прерываний (окончание)

 

.2 Инициализация микроконтроллера

 

При запуске микроконтроллера необходимо проинициализировать следующие модули:

1.Порты ввода / вывода;

2.Модуль АЦП;

.Модуль CCP1;

.Таймер TMR1;

.Таймер TMR2;

.Модуль USART;

.Модуль MSSP;

Необходимо настроить прерывания от приемника USART, модуля CCP1, таймера TMR2, прерывания по заднему фронту сигнала на входе INT и прерывания по изменению уровня на входах .

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

 

;-

; ИНИЦИАЛИЗАЦИЯ ПОРТОВ ВВОДА/ВЫВОДАINTCON, GIE; ЗАПРЕТИТЬ ПРЕРЫВАНИЯPORTA; ОЧИСТКА ПОРТОВPORTBPORTC

B00111111; ЛИНИИ RA0-RA5 НА ВВОДTRISAB11110011; ЛИНИИ RB2, RB3 НА ВЫВОД

; ОСТАЛЬНЫЕ НА ВВОДTRISBTRISC

;-

; ИНИЦИАЛИЗАЦИЯ МОДУЛЯ USARTB10010000; ВКЛЮЧИТЬ МОДУЛЬ USART

; РАЗРЕШИТЬ ПРИЕМ

; УСТАНОВИТЬ 8-РАЗРЯДНЫЙ ПРИЕМRCSTAB00000100; УСТАНОВИТЬ 8-РАЗРЯДНУЮ ПЕРЕДАЧУ

; АСИНХРОННЫЙ НИЗКОСКОРОСТНОЙ РЕЖИМ ПЕРЕДАЧИTXSTAD129; СКОРОСТЬ ОБМЕНА 9600 бит/сSPBRG

;-

; ИНИЦИАЛИЗАЦИЯ МОДУЛЯ MSSPB00001000; ВЕДУЩИЙ РЕЖИМ I2CSSPCONB10000000; УПРАВЛЕНИЕ ДЛИТЕЛЬНОСТЬЮ ФРОНТА ВЫКЛЮЧЕНО

; ВЫХ. УРОВНИ СООТВЕТСТВУЮТ СПЕЦИФИКАЦИИ I2CSSPSTAT0x09; ТАКТОВАЯ ЧАСТОТА 100 кГцSSPADDSSPCON2

 

;-

; ИНИЦИАЛИЗАЦИЯ МОДУЛЯ АЦПB10001110; ПРАВОЕ ВЫРАВНИВАНИЕ

; КАНАЛ AN0 - АНАЛОГОВЫЙ ВХОД, ОСТАЛЬНЫЕ ЦИФРОВЫЕADCON1B10000001; МОДУЛЬ АЦП ВКЛЮЧЕН

; ТАКТОВАЯ ЧАСТОТА Fosc/32

; ВЫБРАН КАНАЛ 0ADCON0

 

;-

; ИНИЦИАЛИЗАЦИЯ МОДУЛЯ CCPB00001011; РЕЖИМ СРАВНЕНИЯ

; ТРИГГЕР СПЕЦИАЛЬНЫХ ФУНКЦИЙCCP1CON0x80; ЗАГРУЗИТЬ 8000h В РЕГИСТРЫ CCPR1H И CCPR1LCCPR1HCCPR1L

;-

; ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА TMR1B00000010; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ 1:1

; СИНХРОНИЗАЦИЯ ВКЛЮЧЕНА

; ВНЕШНИЙ ИСТОЧНИК ТАКТОВЫХ ИМПУЛЬСОВT1CONTMR1L; ОЧИСТКА РЕГИСТРОВ TMR1L И TMR1HTMR1H

;-

; ИНИЦИАЛИЗАЦИЯ ТАЙМЕРА TMR2B01111010; ПРЕДДЕЛИТЕЛЬ 1/16, ВЫХОДНОЙ ДЕЛИТЕЛЬ 1/16

MOVWFT2CON0xFFPR2

;-OPTION_REG; ПОДКЛЮЧИТЬ ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ

; К ВЫВОДАМ PORTB

; АКТИВНЫЙ ЗАДНИЙ ФРОНТ ИМПУЛЬСА НА ВХОДЕ INT

;-

; ИНИЦИАЛИЗАЦИЯ ПРЕРЫВАНИЙB01011000; РАЗРЕШИТЬ ПРЕРЫВАНИЯ ОТ ПЕРИФЕРИЙНЫХ МОДУЛЕЙ

; И ПРЕРЫВАНИЯ ПО ВХОДАМ INT И INTCONB00100110; РАЗРЕШИТЬ ПРЕРЫВАНИЯ ОТ ПРИЕМНИКА USART,

; МОДУЛЯ CCP1 И ТАЙМЕРА TMR2PIR1PIE1

 

;-

; ИНИЦИАЛИЗАЦИЯ РЕГИСТРОВ ОБЩЕГО НАЗНАЧЕНИЯEEADR; ОЧИСТИТЬ РЕГИСТР АДРЕСАEECON1, EEPGD; УСТАНОВИТЬ ЧТЕНИЕ ИЗ EEPROMEECON1, RD; НАЧАТЬ ЧТЕНИЕEEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХMAX_TL; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР MAX_TLEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХMAX_TH; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР MAX_THEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTART_ML; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР START_MLEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTART_MH; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР START_MHEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTART_HL; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР START_HLEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTART_HH; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР START_HHEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTOP_ML; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР STOP_MLEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTOP_MH; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР STOP_MHEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTOP_HL; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР STOP_HLEEADR, F; УВЕЛИЧИТЬ АДРЕС ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ НА 1EEDATA, W; ПРОЧИТАТЬ РЕГИСТР ДАННЫХSTOP_HH; ПОМЕСТИТЬ СОДЕРЖИМОЕ ТЕКУЩЕЙ ЯЧЕЙКИ ПАМЯТИ

; В РЕГИСТР STOP_HH

B0100000; ВКЛЮЧИТЬ РЕЖИМ ОТОБРАЖЕНИЯ ТЕКУЩЕГО ВРЕМЕНИFLAG_RFLAG_R1; ВЫКЛЮЧИТЬ РЕЖИМ ПОДДЕРЖАНИЯ ТЕМПЕРАТУРЫ

IND_0; ОБНУЛИТЬ РЕГИСТРЫ ИНДИКАЦИИIND_1

CLRFIND_2IND_3

SEC_L; ОБНУЛИТЬ СЧЕТЧИКИSEC_HMIN_LMIN_HHOUR_L

CLRFHOUR_H

B00000010; ВКЛЮЧИТЬ ДЕЦИМАЛЬНУЮ ТОЧКУ ВО 2-М РАЗРЯДЕPOINT

;-

; ИНИЦИАЛИЗАЦИЯ ДРАЙВЕРА LCDSSPCON, SSPEN; ВКЛЮЧИТЬ МОДУЛЬ MSSPSSPCON2, SEN; СГЕНЕРИРОВАТЬ БИТ STARTSSPCON2, SEN; ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START$-10x38; ПЕРЕДАТЬ АДРЕС ДРАЙВЕРАSSPBUFSSPCON2, ACKSTAT; ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ$-10x01; ПРЕРЕДАТЬ АДРЕС РЕГИСТРА УПРАВЛЕНИЯ ДЕКОДИРОВАНИЕМSSPBUFSSPCON2, ACKSTAT; ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ$-10x0F; ВКЛЮЧИТЬ ДВОИЧНО-ДЕСЯТИЧНОЕ ДЕКОДИРОВАНИЕ ДЛЯ ВСЕХ

; РАЗРЯДОВSSPBUFSSPSTAT, BF; ОЖИДАТЬ ОКОНЧАНИЕ ПЕРЕДАЧИ$-10x07; УСТАНОВИТЬ ЯРКОСТЬ СВЕЧЕНИЯ ИНДИКАТОРОВSSPBUFSSPCON2, ACKSTAT; ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ$-1SSPCON2, PEN; СФОРМИРОВАТЬ БИТ STOP

INTCON, GIE; РАЗРЕШИТЬ ПРЕРЫВАНИЯ

;-

 

2.3 Преобразование напряжения от датчика температуры

 

Ниже приведена часть программы, осуществляющая преобразование напряжения от датчика температуры. При изменении температуры от 0 до 1000С напряжение на входе АЦП изменяется в пределах 0…4,88 В. При этом результат преобразования в регистрах ADRESL и ADRESH будет изменяться в пределах 0…1000d, что позволяет легко преобразовать результат в десятичный формат.

 

;-TIME1; СФОРМИРОВАТЬ ЗАДЕРЖКУ 20 мкс

MOVWFTIMER1TIMER1, F$+1

;-_START; ПОДПРОГРАММА ИЗМЕРЕНИЯ ТЕМПЕРАТУРЫADCON0, GO; НАЧАТЬ ПРЕОБРАЗОВАНИЕADCON0, GO; ОЖИДАТЬ ОКОНЧАНИЯ ПРЕОБРАЗОВАНИЯ$-1

;-

 

Для осуществления временных задержек, необходимых для заряда внутреннего конденсатора модуля АЦП реа