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

call  ADCwork         ; возьмем значение_2

shld  Last_PS         ; и сохраним

RET                   ;

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

ADCwork:                          ; получим усреднение за период

call  ADCsubw         ; I раз за период сети

xchg          ; (HL)<-(DE)

call  ADCsubw         ; II раз за период сети

RST   1               ; сложим с предыдущим

call  ADCsubw         ; III раз за период сети

RST   1               ; сложим

call  ADCsubw         ; IV раз за период сети

RST   1               ; сложим (пока все в HL)

mvi   c,3             ; делить на 8 (три сдвига)

ADCmid:     ora   a               ; CF=0

mov   a,h             ;

rar                   ;

mov   h,a             ;

mov   a,l             ;

rar                   ;

mov   l,a             ;

dcr   c               ;

JNZ   ADCmid          ;

RET                   ; выход с результатом в HL

;---------------------------------ADCsubw:                          ; Оцифровка по предварительно

; установленному каналу

mvi   a,5*2+1         ; PC5=1

out   Port1RCW        ; гашение AЦП

mov   a,a             ; зад. 5 мкс

mvi   a,5*2+0         ; PC5=0

out   Port1RCW        ; преобразование AЦП

call  Delay5ms        ; зад. 5 мс

in    Port1C          ; ст. биты AЦП

ani   03h             ; выделим ADCdata9,8

mov   d,a             ;

in    Port1B          ; младшие биты ADC

mov   e,a             ; в (DE) - Uвх*2 (на входе -

; усилитель)

RET                   ;

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


Delay5ms:                         ; Задержка 5 мс

mvi   d,200           ;  5мс всего

Loop5ms:    mov   a,a             ;  5T

mov   a,a             ;  5T

dcr   d               ;  5T

JNZ   Loop5ms         ; 10T - в цикле 25T

RET                   ;

ENDPROC               ;

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

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

;           CheckLimits

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

;---------------------------------CheckLimits PROC                  ;

lhld  Last_PD         ; проверка диастолического

lxi   d,Tol_PDmin     ;

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

JC    SetBad_P        ;

xchg                  ;

lxi   h,Tol_PDmax     ;

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

JC    SetBad_P        ;

lhld  Last_PS         ; проверка диастолического

lxi   d,Tol_PSmin     ;

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

JC    SetBad_P        ;

xchg                  ;

lxi   h,Tol_PSmax     ;

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

JC    SetBad_P        ;

xra   a               ;

sta   BadPress        ; Давление O'K

CheckLow_P: lhld  Last_PS         ;

lxi   d,P_ZERO        ;

            RST   4               ; проверка на пропадание давления

JC    SetNONE_P       ;

xra   a               ;

sta   LowPress1       ; обнулим

sta   LowPress2       ;

RET                   ; выход по нормальному давлению

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

SetBad_P:   lda   BadPress        ;

ora   a               ; проверка, было ли раньше плохое

RNZ                   ; да, уже давно

cma                   ; (A)=0FFh

sta   BadPress        ; флаг плохого давления

call  SoundON         ; вкл. сигнализацию

JMP   CheckLow_P      ; далее - проверка на пропадание

;---------------------------------SetNONE_P:  lda   LowPress2       ;

ora   a               ; проверка, давно ли нету

RNZ                   ; да, уже давно ( >1min )

lda   LowPress1       ; нет, недавно  ( <1min )

ora   a               ;

JNZ   SetLow2         ;

cma                   ; пропало только что,

sta   LowPress1       ; установим LowPress1

RET                   ;

;---------------------------------SetLow2:    mvi   a,0ffh          ; (A)=0FFh

sta   LowPress2       ; флаг отсутствия давления 1 мин

call  SoundON         ; вкл. звук

RET         ;

            ENDPROC               ;

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

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

;           DoStatistic

; Обработкаданныхидобавлениестатистики

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

DoStatistic PROC                  ;

lda   Count15min      ; указ. на счетчик 15 минут

cpi   Set_15min       ; первый раз?