Управление барокамерой
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
ий
Рисунок 14 - Блок-схема алгоритма обработки прерываний
Рисунок 14 - Блок-схема алгоритма обработки прерываний
Рисунок 14 - Блок-схема алгоритма обработки прерываний
Рисунок 14 - Блок-схема алгоритма обработки прерываний
Рисунок 14 - Блок-схема алгоритма обработки прерываний
Рисунок 14 - Блок-схема алгоритма обработки прерываний
2.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_3SEC_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 Преобразование напряжения от датчика температуры
Ниже приведена часть программы, осуществляющая преобразование напряжения от датчика