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

inx   h               ;

ana   M               ; addr+1

inx   h               ;

ana   M               ; addr+2

inx   h               ;

ana   M               ; addr+3

cpi   0FFh            ; проверка

JNZ   BADmemory       ; если где-то не единица…

inx   h               ;

mov   a,h             ;

cpi   HIGH(RAMend)+1  ;

JNZ   MEMread2        ; поиск 2049-го прохода

lxi   h,RAMbase       ; начало ОЗУ

MEMload3:   mov   M,L             ; загрузка нарастающего числа

inx   h               ;

mov   M,L             ; addr+1

inx   h               ;

mov   M,L             ; addr+2

inx   h               ;

mov   M,L             ; addr+3

inx   h               ;

mov   a,h             ;

cpi   HIGH(RAMend)+1  ;

JNZ   MEMload3        ; поиск 2049-го прохода

lxi   h,RAMbase       ; начало ОЗУ

MEMread3:   mov   a,M             ; чтение

cmp   L               ; проверка

JNZ   BADmemory       ; если где-то не совпадает…

inx   h               ;

mov   a,h             ;

cpi   HIGH(RAMend)+1  ;

JNZ   MEMread3        ; поиск 2049-го прохода

lxi   h,RAMbase       ; начало ОЗУ

mvi   b,00h           ;

MEMload1:   mov   M,b             ; загрузка НУЛЯМИ

inx   h               ;

mov   M,b             ; addr+1

inx   h               ;

mov   M,b             ; addr+2

inx   h               ;

mov   M,b             ; addr+3

inx   h               ;

mov   a,h             ;

cpi   HIGH(RAMend)+1  ;

JNZ   MEMload1        ; поиск 2049-го прохода

; проверка ЧТЕНИЯ НУЛЕЙ

lxi   h,RAMbase       ; начало ОЗУ

MEMread1:   mov   a,M             ; чтение

inx   h               ;

ora   M               ; addr+1

inx   h               ;

ora   M               ; addr+2

inx   h               ;

ora   M               ; addr+3

JNZ   BADmemory       ; если где-то не нуль…

inx   h               ;

mov   a,h             ;

cpi   HIGH(RAMend)+1  ;

JNZ   MEMread1        ; поиск 2049-го прохода

JMP   MEMgood         ; на инициализацию памяти


;---------------------------------;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒

;           BADMEMORY

; "тревога" на 1.5 с если был сбой памяти

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

BADmemory:  mvi   a,80h           ;

out   Port2C          ; тревога (PC7=1)

lxi   d,0FFFFh        ; 65535=1570 mS задержка

Sound1:     dcx   d               ;  5T

mov   a,d             ;  5T

ora   e               ;  4T

JNZ   Sound1          ; 10T  - 24мкс в цикле

xra   a

out   Port2C          ; откл. тревоги (PC7=0)

lxi   d,0FFFFh        ; 1.5 S задержка

Sound2:     dcx   d               ;  5T

mov   a,d             ;  5T

ora   e               ;  4T

JNZ   Sound2          ; 10T  - 24мкс в цикле

JMP   ReST7           ; рестарт системы по причине

; плохой памяти

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

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

; Если успешно пройден тест памяти…

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

MEMgood:    xra   a               ;

out   Ind1            ; то мигнем индикаторами

out   Ind10           ;

out   Ind100          ;

mvi   a,7*2+1         ; PC7=1

out   Port2RCW        ; и динамиком

lxi   d,830           ; на 0.2 секунды

Flash:      dcx   d               ;  5T

mov   a,d             ;  5T

ora   e               ;  4T

JNZ   Flash           ; 10T  - 24мкс в цикле

mvi   a,0FFh          ;

out   Ind1            ; и потушим индикаторы

out   Ind10           ;

out   Ind100          ;

mvi   a,7*2+0         ; PC7=0

out   Port2RCW        ; и выключим динамик.

call  MEMinit         ; Инициализация переменных

call  PanelScan       ; два раза, чтобы побороть

call  PanelScan       ; защиту от дребезга

MainLoop:                         ;                  ─┐

call  MAIN            ;                   │ ГЛAВНЫЙ

call  Delay50ms       ; задержка 50 мс    │  ЦИкЛ

JMP   MainLoop        ;                  ─┘


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

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

;           MEMINIT

; Инициализация системных переменных

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

MEMinit     PROC                  ;

lxi   h,_STATbase     ;

shld  StatBase        ; указатель на начало статистики

xra   a               ;

sta   StatSize        ; пока нету статистики

lxi   h,SmaxStart     ;

shld  Tol_PSmax       ; установка