Разработка системы управления кондиционером
djnz R2, za1
mov a, #0
ret
za5: mov a, #1
ret
;подпрограмма запуска процесса измерения температуры
sttmp: push psw
mov psw, #bank2 ;выбор банка 2 памяти
stm1: call resLAN ;сброс
cjne a, #0, stm6 ;если ошибка переход
mov a, #0CCH ;пропуск ПЗУ
call wr8LAN
mov a, #44H ;запуск преобразования
call wr8LAN
stm4: call rd1LAN ;запрос об оконч
ании преобразования
jne stm4 ;если не готово / повторить
stm5: pop psw ;выход из подпрограммы
ret
stm6: call prErr ;если ошибка, печать
jmp stm1 ;перейти в начало
;подпрограмма чтения температуры
;выходные параметры – температура в bufLAN - младший байт, в bufLAN+1 - старший байт
rdtmp: push psw
mov psw, #bank2 ;выбор банка 2 памяти
call resLAN ;вызов процедуры сброса
cjne a, #0, rtm2 ;если ошибка
mov a, #0CCH ;пропуск ПЗУ
call wr8LAN
mov a, #0BEH ;выдать команду
call wr8LAN
call rd8LAN ;чтение младшего байта
mov bufLAN, a ;запись в буфер
call rd8LAN ;чтение старшего байта
mov bufLAN+1, a ;запись в буфер
pop psw ;завершение программы
ret
rtm2: call prErr ;если ошибка, вывести на экран
jmp rtm1 ;перейти в начало
;подпрограмма формирования сигнала начального сброса
resLAN:clr P1.1 ;закорачиваем линию
mov LoopCnt, #100 ;задержка 700 мкс
rst1: call Delay
djnz LoopCnt, rst1
setb P1.1 ;отпускаем линию
mov LoopCnt, #9 ;задержка 65 мкс
rst2: call Delay
djnz LoopCnt, rst2
jnb P1.1, rst3 ;проверка сигнала присутствия
mov a, #1 ;код ошибки «нет датчика»
ret
rst3: mov LoopCnt, #71 ;задержка 500 мкс
rst4: call Delay
djnz LoopCnt, rst4
jb P1.1, rst5 ;если на линии 1 переход
mov a, #2 ;код ошибки «КЗ в линии»
ret
rst5: mov a, #0 ;код нормального завершения
ret
;подпрограмма чтения слота (через признак переноса)
mrslot: clr P1.1 ;закоротить линию
nop
setb P1.1 ;отпустить линию
call Delay ;задержка 13 мкс
call Delay
nop
nop
nop
mov C, P1.1 ;прочитать и сохранить бит
mov LoopCnt, #8 ;задержка 60 мкс
msl1: call Delay
djnz LoopCnt, msl1
ret
;подпрограмма записи 0 в слот
mwlow: clr P1.1 ;закоротить линию
mov LoopCnt, #11 ;задержка 80 мкс
mwl1: call Delay
djnz LoopCnt, mwl1
setb P1.1 ;отпустить линию
ret
;подпрограмма записи 1 в слот
mwhi: clr P1.1 ;закоротить линию
call Delay ;задержка 5 мкс
setb P1.1 ;отпустить линию
mov LoopCnt, #11 ;задержка 75 мкс
mwh1: call Delay
djnz LoopCnt, mwh1
ret
;процедура задержки 5 мкс (при тактовой частоте 12МГц)
Delay: nop
ret
;программа записи байта через аккумулятор
wr8LAN:
mov R1, #8 ;инициализация счетчика разрядов
wb1: rrc A ;младший бит в C
jc wb2 ;если текущий бит = 0
call mwlow ;запись 0 в слот
jmp wb3
wb2: call mwhi ;запись 1 в слот
wb3: djnz R1, wb1 ;продолжать, если не последний
ret
;подпрограмма записи бита, который передается через С
wr1LAN:
jc wb4 ;если бит = 0
call mwlow ;запись 0 в слот
jmp wb5
wb4: call mwhi ;запись 1 в слот
wb5:
ret
;подпрограмма чтения байта
rd8LAN:
mov R1, #8 ;счетчик количества битов
rb1: call mrslot ;чтение очередного бита
rrc A ;сдвиг битов младшим разрядом вперед
djnz R1, rb1 ;продолжать, если не последний
ret
;подпрограмма чтения бита
rd1LAN:
call mrslot
ret
;вывод Тпм наЖКИ №2
prtmp: mov a, #16 ;вывод пробела
call prch2
mov a, bufLAN+1 ;считываем старший байт
swap a ;обмен тетрад
anl a, #0F0H ;получили старший полубайт
mov R5, a ;временно записываем в R5
mov a, bufLAN ;считываем младший байт
swap a ;обмен тетрад
anl a, #0FH ;получили младший полубайт
add a, R5 ;складываем полубайты
mov b, #10 ;деление на 10
div ab
call prch2 ;вывод десятков
mov a, b ;берем остаток от деления
call prch2 ;вывод единиц
mov a, #17 ;вывод символа «градус»
call prch2
mov a, #0CH ;вывод буквы «С»(Цельсия)
call prch2
ret
;подпрограмма режима охлаждения
reoh: clr P0.2 ;выкл. Нагревательный элемент
setb P0.4 ;вкл. компрессор
setb P0.3 ;вкл. вентелятор
call zader
jz re4 ;переход при нажатой клавише
ret
re4: clr P0.4 ;выкл. компрессор
clr P0.3 ;выкл. вентелятор
call zader
jz re3 ;переход при нажатой клавише
ret
re3: mov a, bufLAN+1
swap a
anl a, #0F0H
mov R5, a
mov a, bufLAN
swap a
anl a, #0FH
add a, R5 ;в аккумуляторе байт Тпм
mov b, bufLAN2
mov b, #b-2
mov a, #LE(a, b) ;сравнение Тпм<=Туст-2
cjne a, #0FFFFH, re1 ;переход, если не истина
inc bufLAN3 ;счетчик циклов режима увеличить на 1
mov a, #GT(bufLAN3, 2)
cjne a, #0FFFFH, re2 ;сравнение «счетчик циклов>=2»
mov bufLAN3, #0 ;обнуление счетчика
mov a, #4 ;в режим обогрева
ret
re1: mov bufLAN3, #0 ;обнуление счетчика
re2: mov a, #5 ;режим охлаждения
ret
;конец программы
end
Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:
Поиск рефератов
Последние рефераты раздела
- Микроконтроллер системы управления
- Разработка алгоритмического и программного обеспечения стандарта IEEE 1500 для тестирования гибкой автоматизированной системы в пакете кристаллов
- Разработка базы данных для информатизации деятельности предприятия малого бизнеса Delphi 7.0
- Разработка детектора высокочастотного излучения
- Разработка микропроцессорного устройства для проверки и диагностики двигателя внутреннего сгорания автомобиля
- Разработка микшерного пульта
- Математические основы теории систем