Разработка системы управления кондиционером

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

Страница:  1  2  3  4  5  6  7  8  9  10  11  12  13 


Другие рефераты на тему «Коммуникации, связь и радиоэлектроника»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы