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

pop   PSW             ; восстановим образ

mov   b,a             ; на будущее

ani   00010000b       ; выделим PA4 - сброс тревоги

lxi   h,P_alarmOFF    ;

cmp   M               ; проверка на дребезг

mov   M,a             ; сохраним новое состояние клавиш

JNZ   Key3Scan        ;

lxi   h,alarmOFF      ;

cmp   M               ; проверка на изменение состояния

JZ    Key3Scan        ;

mov   M,a             ; сохр. новое состояние

ora   a               ; проверим сброс тревоги

CNZ   SoundOFF        ; = 1 - выключим звук

Key3Scan:                         ;

mov   a,b             ; восстановим образ

ani   00100000b       ; выделим PA5 - ввод / индикация

lxi   h,P_switch      ;

cmp   M               ; проверка на дребезг

mov   M,a             ; сохраним новое состояние клавиш

RNZ                   ;

lxi   h,switch        ;

cmp   M               ; проверка на изменение состояния

RZ                    ;

mov   M,a             ; сохр. новое состояние

RET                   ;

;---------------------------------PosToBin8:                        ; позиц. код из (A) в двоичный.

ora   a               ; приоритет у младшего разряда.

mov   b,a             ; нуль в (b), если он там есть

JZ    Compl8          ; выход если нуль

mvi   c,8             ; число бит

mvi   b,0             ; начнем считать с нуля

PosRotate8: inr   b               ;                              5T

rar                   ; сдвиг мл. бойта позиц. Кода  4T

JC    Compl8          ; пока не дойдем до 1 в коде  10T

dcr   c               ;                              5T

JNZ   PosRotate8      ; или выход по коцу байта     10T

Compl8:                           ; дополним чтобы стабилиз. время

mvi   a,9             ;

sub   b               ;

ComplLoop8: mov   a,a             ; 5T

mov   a,a             ; 5T

mov   a,a             ; 5T

mov   a,a             ; 5T

dcr   a               ; 5T

JNZ   ComplLoop8      ; 10T   доработка до 9 циклов

mov   a,b             ; двоичное число - в (a)

RET                   ; выход с рез-том в (A)

ENDPROC               ;

;----------------------------------

;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

;           SetTol

; установить новый предел давления

;----------------------------------

SetTol:     PROC                  ;

call  GetDEKAD        ;

lxi   d,301           ;

RST   4               ; сравнение

JC    GoodTol         ; если <300

lxi   h,300           ;

GoodTol:    push  h               ; сохраним число с переключателей

lda   InputSel        ; номер вводимого параметра

dcr   a               ; первый ввод - Tol_PDmin+0

rlc                   ; x2 (word)

lxi   h,Tol_PDmin     ; указатель на пред. параметры

mov   e,a             ;

mvi   d,0             ;

RST   1               ; споз. на переменную предела

pop   d               ; восст. число с перекл.

mov   M,e             ;

inx   h               ; сохр. новое значение

mov   M,d             ; нужного предельного параметра

RET                   ;

;

;----------------------------------

GetDEKAD:   mvi   a,SelectD1      ; Взять число с дек. перекл.

out   Port2RCW        ; выбор SA5, единицы

mov   a,a             ;

mov   a,a             ; задержка 10 мкс + 10 на call

call  Get1DEC         ; взять единицы

lxi   h,Tbyte1        ;

mov   M,a             ; запомнить в Tbyte1

mvi   a,ClearD1       ;

out   Port2RCW        ; отключение SA5

mvi   a,SelectD10     ;

out   Port2RCW        ; выбор SA6, десятки

mov   a,a             ;

mov   a,a             ; задержка 10 мкс + 10 на call

call  Get1DEC         ; взять единицы

inx   h               ;

mov   M,a             ; запомнить в Tbyte2

mvi   a,ClearD10      ;

out   Port2RCW        ; отключение SA6

mvi   a,SelectD100    ;

out   Port2RCW        ; выбор SA7, сотни

mov   a,a             ;

mov   a,a             ; задержка 10 мкс + 10 на call

call  Get1DEC         ; взять единицы

inx   h               ;

mov   M,a             ; запомнить в Tbyte3

mvi   a,ClearD100     ;

out   Port2RCW        ; отключение SA7

dcx   h               ;

mov   a,M             ; возьмем десятки

mov   b,a             ;

rlc                   ; x2

rlc                   ; x4

rlc                   ; x8