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

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

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

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

 

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

MOVWFTIMER1TIMER1,F$+1

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

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

Для осуществления временных задержек, необходимых для заряда внутреннего конденсатора модуля АЦП реализован программный счетчик на основе регистра TIMER1, определенного по адресу 26h. Счетчик формирует временную задержку 20 мкс. Рассчитаем константу TIME1.

 

 

где Tз - время задержки, Fosc - тактовая частота; n - количество машинных циклов в одном цикле работы счетчика. Так как счетчик включает в себя команду DECFSZ, выполняемую за 1 МЦ (если результат не равен 0) и команду GOTO, выполняемую за 2 МЦ, то n = 3. Таким образом

 

.

 

2.4 Подпрограмма управления выводом температуры на индикацию

 

Данная часть программы определяет, разрешено ли отображение температуры на индикаторах. Если отображение разрешено, подпрограмма включает точку в первом разряде индикации, помещает содержимое регистров ADRESL и ADRESH во временные регистры TEMP_TL и TEMP_TH и производит вызов подпрограммы двоично-десятичной коррекции.

 

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

;ПОДПРОГРАММА УПРАВЛЕНИЯ ВЫВОДОМ ТЕМПЕРАТУРЫ НА ИНДИКАЦИЮFLAG_R,7;ОТОБРАЖЕНИЕ ТЕМПЕРАТУРЫ ВКЛЮЧЕНОST_NAGREV;НЕТ - ПЕРЕХОД К ПОДПРОГРАММЕ УПРАВЛЕНИЯ НАГРЕВОМB00000100;ДА - ВКЛЮЧИТЬ ТОЧКУ В ПЕРВОМ РАЗРЯДЕPOINTADRESL,W;ПОМЕСТИТЬ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ ВО ВРЕМЕННЫЕ

;РЕГИСТРЫTEMP_TLADRESH,W

MOVWFTEMP_THBIN_DEC;ВЫЗОВ ПОДПРОГРАММЫ ДВОИЧНО-ДЕСЯТИЧНОЙ

;КОРРЕКЦИИ

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

2.5 Подпрограмма управления нагревателем

 

Данная подпрограмма осуществляет контроль состояния датчика снижения уровня воды и проверяет включение режима поддержания температуры. Если уровень воды в норме и включен режим поддержания температуры (бит 0 в регистре FLAG_R1 установлен в 1), то происходит включение нагревателя. Если уровень воды уменьшается ниже нормы, нагреватель выключается и включается индикатор Снижение уровня воды.

 

;--------------------------------------------------------------_NAGREV;ПОДПРОГРАММА УПРАВЛЕНИЯ НАГРЕВАТЕЛЕМFLAG_R1,0;РЕЖИМ ПОДДЕРЖАНИЯ ТЕМПЕРАТУРЫ ВЫКЛЮЧЕН$+3PORTB,2;ДА - ВЫКЛЮЧИТЬ НАГРЕВ

GOTOOUT_LEDPORTA,1;УРОВЕНЬ В НОРМЕ

GOTO$+4PORTB,3;НЕТ - ВКЛЮЧИТЬ ИНДИКАТОР "СНИЖЕНИЕ УРОВНЯ

;ВОДЫ"

BCFPORTB,2;ВЫКЛЮЧИТЬ НАГРЕВ

GOTOOUT_LEDPORTB,3;ВЫКЛЮЧИТЬ ИНДИКАТОР "СНИЖЕНИЕ УРОВНЯ ВОДЫ"

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

 

2.6 Подпрограмма вычисления нижнего предела температуры

 

Данная подпрограмма вычисляет нижний предел температуры, который принимается на 50С ниже заданного (верхнего).

Рассчитаем константу DELT_T, соответствующую разности температур в 50С:

 

;

 

где Nmax - значение регистров ADRESL и ADRESH, соответствующее температуре Tmax.

Так как Tmax = 1000С и Nmax = 1000d, то

 

.

 

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

;ПОДПРОГРАММА ВЫЧИСЛЕНИЯ НИЖНЕГО ПРЕДЕЛА ТЕМПЕРАТУРЫMIN_TH;ОЧИСТКА РЕГИСТРА MIN_THMAX_TL,WDELT_T;ВЫЧЕСТЬ ИЗ СОДЕРЖИМОГО MAX_TL РАЗНОСТЬ ТЕМПЕРАТУРMIN_TL;ПОМЕСТИТЬ РЕЗУЛЬТАТ В MIN_TLMIN_TH,W;ЕСЛИ БЫЛ ЗАЕМMAX_TH,W;УМЕНЬШИТЬ ЗНАЧЕНИЕ РЕГИСТРА MAX_TH НА 1MIN_TH;ПОМЕСТИТЬ РЕЗУЛЬТАТ В РЕГИСТР MIN_THSTATUS,C;ЕСЛИ БЫЛ ЗАЕМ$+4MIN_TL;ОЧИСТИТЬ РЕГИСТРЫ MIN_TL И MIN_THMIN_THSTATUS,C;И СБРОСИТЬ ФЛАГ ПЕРЕНОСА

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

 

2.7 Подпрограмма контроля температуры

 

Данная подпрограмма осуществляет контроль температуры воды и при ее уменьшении ниже значения, записанного в регистрах MIN_TH и MIN_TL включает нагреватель, а при увеличении выше значения, записанного в регистрах MAX_TH и MAX_TL выключает его.

 

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

;ПОДПРОГРАММА ПРОВЕРКИ СНИЖЕНИЯ ТЕМПЕРАТУРЫ НИЖЕ НОРМЫ

 

BCFSTATUS,ZADRESH,WMIN_TH,WSTATUS,ZM1ADRESH,WSTATUS,CMIN_TH,WSTATUS,C

BSFPORTB,2;ВКЛЮЧЕНИЕ НАГРЕВАТЕЛЯ

STATUS,Z

MOVFADRESL,WMIN_TL,W

BTFSCSTATUS,CPORTB,2;ВКЛЮЧЕНИЕ НАГРЕВАТЕЛЯ

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

;ПРОВЕРКА ПРЕВЫШЕНИЯ НОРМЫ

BANC1

MOVFADRESH,W

XORWFMAX_TH,WSTATUS,ZM2ADRESH,WMAX_TH,WSTATUS,CPORTB,2;ВЫКЛЮЧЕНИЕ НАГРЕВАТЕЛЯ

STATUS,ZADRESL,WMAX_TH,WSTATUS,C

BCFPORTB,2;ВЫКЛЮЧЕНИЕ НАГРЕВАТЕЛЯ

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

 

.8 Подпрограмма вывода на индикацию

 

Данная подпрограмма осуществляет передачу значений буферных регистров индикации IND_0, IND_1, IND_2, IND_3 и регистра управления децимальной точкой POINT во внутренние регистры драйвера LCD.

Драйвер MAX6958 поддерживает автоинкрементирование адреса при записи значений в регистры. Поэтому при передаче данных достаточно указать начальный адрес (0х20), а затем последовательно передавать данные без предварительной передачи адреса следующего регистра. Адрес драйвера на шине I2C 0x38.

Ниже приведен листинг программы, осуществляющей вывод на индикацию.

 

;---------------------------------------------------------------_LED

;ПОДПРОГРАММА ВЫВОДА НА ИНДИКАЦИЮSSPCON2,SEN;СГЕНЕРИРОВАТЬ БИТ STARTSSPCON2,SEN;ОЖИДАТЬ ОКОНЧАНИЯ ГЕНЕРАЦИИ БИТА START$-10x38;ПЕРЕДАТЬ АДРЕС ДРАЙВЕРАSSPBUFSSPCON2,ACKSTAT;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ$-10x20;ПРЕРЕДАТЬ АДРЕС ПЕРВОГО РЕГИСТРА ДАННЫХSSPBUFSSPCON2,ACKSTAT;ОЖИДАТЬ ФОРМИРОВАНИЕ БИТА ПОДТВЕРЖДЕНИЯ$-1IND_3,W;ПЕРЕДАТЬ СОДЕРЖИМОЕ 3-ГО РАЗРЯДА ИНДИКАЦИИ

BANC1SSPBUFSSPSTAT,BF

GOTO$-1IND_2,W;ПЕРЕДАТЬ СОДЕРЖИМОЕ 2-Г