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

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

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

ий

Рисунок 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 Преобразование напряжения от датчика температуры

 

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