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

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

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

лизован программный счетчик на основе регистра 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; ПОМЕСТИТЬ РЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ ВО ВРЕМЕННЫЕ

; РЕГИСТРЫ

MOVWFTEMP_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; ВЫКЛЮЧЕНИЕ НАГРЕВАТЕЛЯ

 

M2STATUS, Z

MOVFADRESL, WMAX_TH, W

BTFSCSTATUS, C

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

;-

 

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-ГО РАЗРЯДА ИНДИКАЦИИ

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