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

lxi   h,SminStart     ; допусковых

shld  Tol_PSmin       ; предельных

lxi   h,DmaxStart     ; значений

shld  Tol_PDmax       ; по

lxi   h,DminStart     ; дефолту

shld  Tol_PDmin       ;

mvi   a,Set_1sec      ; установка

sta   Count1sec       ; счетчиков

mvi   a,Set_1min      ; времени

sta   Count1min       ;

mvi   a,Set_15min     ;

sta   Count15min      ;

mvi   b,1             ;

mvi   a,0             ;

lxi   h,IndMode       ; указатель на системные режимы

mov   M,b             ; первый режим

inx   h               ; InputSel

mov   M,a             ; еще ничего не вводили

inx   h               ;

mov   M,a             ; нуль в AlarmOFF

sta   LowPress1       ; обнулим флаги

sta   LowPress2       ; отсутствия давления

lxi   h,Cur_PDmin     ;

mvi   c,24            ; к-во переменных по статистике

StatClear:  mov   M,a             ;

dcr   c               ; очистим диапазон

JNZ   StatClear       ; Cur_PDmin - Work_PDmin

call  Display         ; чтобы засветился дисплей

RET                   ;

ENDPROC               ;


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

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

;           MAIN

; менеджер времени и системных ресурсов

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

MAIN        PROC                  ;

call  PanelScan       ; опрос кнопок на панели

lxi   h,Count1sec     ; указ. на счетчик 1 секунды

mov   a,M             ;

dcr   a

mov   M,a

RNZ                   ; ВЫХОД если не >секунда<

mvi   a,Set_1sec

mov   M,a             ; подг. к новому отсчету секунды

CheckMin:

lxi   h,Count1min     ; указ. на счетчик 1 минуты

mov   a,M             ;

dcr   a

mov   M,a

RNZ                   ; ВЫХОД если не >минута<

lda   LowPress2       ;

ora   a               ; не пропало ли давление вообще?

CZ    SoundOFF        ; выключим звук

call  GetAData        ; если >минута< то опрос AЦП

call  CheckLimits     ; проверим пределы (там и SoundON)

call  DoStatistic     ; обработаем данные

RET                   ;

ENDPROC               ;

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

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

;           SoundON

; Включитьзвуковуюисветовуюсигнализацию

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

SoundON:    mvi   a,7*2+1         ;

out   Port2RCW        ; включим звук

ret                   ;

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

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

;           SoundOFF

; Выключитьзвуковуюисветовуюсигнализацию

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

SoundOFF:   mvi   a,7*2+0         ;

out   Port2RCW        ; выключим звук

ret                   ;

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


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

;           PanelScan

; Сканированиекнопокипереключателейнапанелиуправления

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

PanelScan   PROC                  ;

in    Port1A          ; кнопки вида индикации

cma                   ; к полож. логике

ani   00111111b       ; активны только PA5-PA0

call  PosToBin8       ; преобразуем в дв. код

lxi   h,P_IndMode     ;

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

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

JNZ   Key1Scan        ;

lxi   h,IndMode       ;

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

JZ    Key1Scan        ;

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

call  Display         ; обновим индикацию

Key1Scan:                         ;

in    Port1A          ; кнопки ввода пределов

cma                   ; к полож. логике

push  PSW             ; сохраним образ

ani   00001111b       ; активны только PA3-PA0

call  PosToBin8       ; преобразуем в дв. код

lxi   h,P_InputSel    ;

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

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

JNZ   Key2Scan        ;

lxi   h,InputSel      ;

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

JZ    Key2Scan        ;

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

ora   a               ; кн. нажата или отпущена?

JZ    Key2Scan        ; отпущена

lda   switch          ;

ora   a               ; проверим режим ввода

JZ    Key2Scan        ; уходим, если режим индикации

call  SetTol          ; если режим ввода то…

call  Display         ;

Key2Scan:                         ;