Курсовая работа: Разработка системы управления кондиционером
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
|