call SetOut ; ****>
push psw ; восстановим стек
JMP CopyBack ; на выход из процедуры
;---------------------------------Mode2: cpi 2 ; проверим на режим 2
JNZ Mode3 ; если не режим 2 то JMP на реж.3
lda FE2_t ; если реж.2 то пров. втор. фотод.
ora a
JZ CopyBack ; если еще не дошли - то на выход
mvi a,3 ; если дошли до второго датчика
sta Mode_t ; то уст. режим 3
JMP CopyBack ; на выход из процедуры
;---------------------------------Mode3: cpi 3 ; проверим реж.3
JNZ Mode4 ; если не режим 3 на реж.4
lda FE1_t
mov b,a ; проверим чтобы человек с
lda FE2_t ; чемоданом вышел
ora b ; за оба фотодатчика;
JNZ CopyBack ; если человек еще здесь...
mvi a,1 ; если уже прошел то
sta Mode_t ; установим опять режим 1
pop psw ; вспомним номер турникета
mvi b,Red ; вкл красный транспарант
mvi c,Green ; выкл красный транспарант
push psw ; ****>
call INC10 ; учтем человека
call TrToVRAM ; покажем на табло
JMP CopyBack ; и на выход из процедуры
;---------------------------------Mode4: lhld TrCount_t ; режим тревоги
dcx h
mov a,h
ora l ; декремент TrCount_t типа word
JNZ CopyBack ; если не прошло 10 сек
pop psw ; если время вышло то вспомним номер
mvi b,0 ; ничего не включим
mvi c,Sound ; но зато выкл звук
call SetOut ; ****>
push psw ; восст. стек
mvi a,1
sta Mode_t ; установим первый режим
CopyBack:
pop psw ; востановим стек
pop h ; вспомним реальный адрес
mvi c,8
lxi d,TempBuf ;
TCopyBack: ldax d
mov M,a
inx h
inx d
dcr c
JNZ TCopyBack ; копируем все назад в таблицу
RET ; ВСЕ.
;---------------------------------; TurnInit
; Инициализация системы с признаками
; теста турникетов
;---------------------------------TurnInit: xra a ; (A)=0
lxi h,TurnTable ; начало массива
mvi c,8*8+4
Clear: mov M,a ; очистка массива турникетов
dcr c ; и зеркал выходных сигналов
JNZ Clear
mvi a,1
sta Mode_1 ; сначала все
sta Mode_2 ; в режиме 1
sta Mode_3
sta Mode_4
sta Mode_5
sta Mode_6
sta Mode_7
sta Mode_8
mvi a,1
SetTest1: mvi b,Test_b_1 ; первая фаза теста mvi c,Test_c_1 ; закрыть двери и вкл красные
call SetOut
inr a
cpi 9
JNZ SetTest1
call Delay1 ; задержка 1сек
mvi a,1
SetTest2: mvi b,Test_b_2 ; вторая фаза теста, по идее
mvi c,Test_c_2 ; зеленые транспаранты.
call SetOut
inr a
cpi 9
JNZ SetTest2
call Delay1 ; задержка 1сек
mvi a,1
FinINIT: mvi b,INIT_b ; инициализация
mvi c,INIT_c ; перед нормальной работой.
call SetOut
inr a
cpi 9
JNZ FinINIT
RET ; все.
;---------------------------------; Delay1
; Задержка 1 сек.
;---------------------------------Delay1: push psw ; сохраним рег. (A)
lxi b,Count1sec
LDel: dcx b ; задержка 1сек
mov a,a
mov a,a
mov a,a
mov a,a
mov a,a
mov a,a
mov a,b
ora c
JNZ LDel
pop psw
RET
;---------------------------------; SetOut
; Включает и выключает сигналы на нужный турникет.
; на входе: в (A) - номер турникета
; в мл.тетраде (B) - сигналы, подлежащие включению
; в мл.тетраде (С) - сигналы, подлежащие вЫключению
;---------------------------------SetOut: push psw ; сохраним рег. (A)
mov d,a ; проверим номер
ani 01h
mov a,d ; восст. (A)
JNZ LowTetr ; нечетный (мл. тетрада)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.