Микропроцессорныая система. Автоматический чайник
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
лизован программный счетчик на основе регистра 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