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

mov c, acc.7                             ;сохраняем значение точки

clr acc.7                          ;сбрасываем значение бита

movc a, @a+DPTR                  ;получаем выводимый код

mov acc.4, c                             ;восстанавливаем значение точки

mov b, a                         ;сохраняем его в b

anl a, #0FH                     ;отделяем младший полубайт

mov P2, a                       ;выводим его на индикатор

setb P2.6                        ;вкл. Режим вывода данных

setb P2.4                        ;импульс записи

clr P2.4

mov a, b                         ;восстанавливаем выводимый код

swap a

anl a, #0FH                     ;отделяем старший полубайт

mov p2, a                        ;выводим его на индикатор

setb p2.6                         ;вкл. Режим вывода данных

setb P2.4                        ;импульс записи

clr P2.4

pop b

pop DPH                        ;восстановление регистров

pop DPL

ret

;подпрограмма вывода символа на ЖКИ №2 через аккумулятор

prch2:          push DPL                       ;сохранение регистров в стеке

push DPH

push b

mov DPTR, #ts              ;начало таблицы символов

mov c, acc.7                             ;сохраняем значение точки

clr acc.7                          ;сбрасываем значение бита

movc a, @a+DPTR                  ;получаем выводимый код

mov acc.4, c                             ;восстанавливаем значение точки

mov b, a                         ;сохраняем его в b

anl a, #0FH                     ;отделяем младший полубайт

mov P3, a                       ;выводим его на индикатор

setb P3.6                        ;вкл. Режим вывода данных

setb P3.4                        ;импульс записи

clr P3.4

mov a, b                         ;восстанавливаем выводимый код

swap a

anl a, #0FH                     ;отделяем старший полубайт

mov P3, a                       ;выводим его на индикатор

setb P3.6                        ;вкл. Режим вывода данных

setb P3.4                        ;импульс записи

clr P3.4

pop b

pop DPH                        ;восстановление регистров

pop DPL

ret

;подпрограмма вывода сообщения на ЖКИ №2

prstr2:          push psw                        ;сохранение регистра psw

          mov psw, #bank3            ;включаем банк 3

ps1:   mov a, #0

          movc a, @a+DPTR                  ;получение очередного символа

          cjne a, #0, ps2                          ;если это не последний выводим

          pop psw                         ;завершение подпрограммы

ret

ps2:   call prch2                        ;вывод символа на экран

          inc DPTR                       ;увеличиваем значение указателя

jmp ps1

;подпрограмма вывода сообщения об ошибке

prErr: push acc

          call eclr2                         ;очистка экрана

          mov a, #2                       ;курсор в позицию 2

          call ecur2

          mov DPTR, #serr           ;вывести надпись «Error»

          call prst2

          pop acc

          call prch2                        ;вывод номера ошибки

          ret

;сообщение «Error»

          ORG 0680H

Serr:   DB     14, 19, 19, 20, 19, 0         ;сообщение «Error», 0 в конце – признак окончания слова

;подпрограмма вывода Туст на ЖКИ №1

prtmu:          mov a, #16

          call prch1

          mov a, bufLAN2

          mov b, #10

          div ab

          call prch1

          mov a, b

          call prch1

          mov a, #17

          call prch

mov a, #0CH

call prch1

ret

;подпрограмма с длительностью выполнения примерно 3 мин. опроса клавиатуры и вывода Тпм

zader: mov R2, #7

za1:    mov R1, #255

za2:    mov R0, #56;

za3:    mov LoopCnt, #255

za4:    call Delay

          djnz LoopCnt, za4

djnz R0, za3

call inkl                           ;опрос клавиатуры

jnz za5                                      ;переход при нажатии

call eclr2                         ;вывод Тпм

mov a, #2

call ecur2

call sttmp

call rdtmp

call prtmp

djnz R1, za2

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



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.