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

InpG_6:     ds    1               ;

Geton_6:    ds    1               ;

FE1_6:      ds    1               ;

FE2_6:      ds    1               ;

TrCount_6:  ds    2               ;

NULL_6:     ds    1

Mode_7:     ds    1               ; режим турникета 7

InpG_7:     ds    1               ;

Geton_7:    ds    1               ;

FE1_7:      ds    1               ;

FE2_7:      ds    1               ;

TrCount_7:  ds    2               ;

NULL_7:     ds    1

Mode_8:     ds    1               ; режим турникета 8

InpG_8:     ds    1               ;

Geton_8:    ds    1               ;

FE1_8:      ds    1               ;

FE2_8:      ds    1               ;

TrCount_8:  ds    2               ;

NULL_8:     ds    1

TempBuf:                          ; временный буфер

Mode_t:     ds    1

InpG_t:     ds    1

Geton_t:    ds    1

FE1_t:      ds    1

FE2_t:      ds    1

TrCount_t:  ds    2

NULL_t:     ds    1

Mirror1     ds    1

Mirror2     ds    1

Mirror3     ds    1

Mirror4     ds    1

Counter     ds    3               ; 24-битный 2-10 счетчик людей

;---------------------------------; Семисегментный знакогенератор

;---------------------------------org   ROMend-0Fh      ; в конце ПЗУ

;     hgfedcba

ZNAKOGEN:   db    00111111b       ; 0     +-A-+

db    00000110b       ; 1     F   B

db    01011011b       ; 2     +-G-¦

db    01001111b       ; 3     E   C

db    01100110b       ; 4     +-D-+ H

db    01101101b       ; 5

db    01111101b       ; 6

db    00000111b       ; 7

db    01111111b       ; 8

db    01101111b       ; 9

db    00110111b       ; A

db    01111100b       ; b

db    00111001b       ; C

db    01011110b       ; d

db    01111001b       ; E

db    01110001b       ; F

;---------------------------------; Старт программы

;---------------------------------org   0000h

ZERO:       di                    ; запрет прерываний

JMP   START           ; на инициализацию

;---------------------------------org   002Ch

RST55:      RET

;---------------------------------org   0034h

RST65:      JMP   TURNIKET        ; на сканирование турникетов

org   003Ch

;---------------------------------; RST7.5 - обработчик водеопрерывания с коррекцией

; аварийной ситуации, если пропадет бегущая единица

; в DispCol (например, при старте системы)

; длина 35 байт, около 110 тактов

;---------------------------------RST75:      push  psw             ; Обработчик ВИДЕО прер - дин. индик.

push  h               ; сохраним изменяемые регитры

lhld  DispPtr         ; спозиц. на VRAM

xra   a

out   IndCol          ; выкл. все

mov   a,M             ; образ из VRAM по адр. из HL

out   IndSegs         ; в регистр сегментов

lda   DispCol         ;

out   IndCol          ; Вкл нужный индикатор

ora   a               ; проверим чтоб что-то было,

JZ    DispInit        ; дабы не погаснуть навсегда.

rrc                   ; передвинем единицу к мл. индикатору

JNC   NextSym         ; если 1 не вытеснилась

DispInit:   mvi   a,00100000b     ; старший шестой инд. (если 1 вытес.)

lxi   h,DispRAM+6     ; указатель - за последний элемент VRAM

NextSym:    dcx   h               ; указатель - на соседнюю мл. ячейку

shld  DispPtr         ; сохраним указаиель

sta   DispCol         ; сохр. позицию для след. индикации

pop   h

pop   psw             ; восст. изменяемые регистры

ei                    ; разрешим прерывания

RET                   ; все. возврат.


org   0100h

;---------------------------------;***********START PROGRAM**********

;---------------------------------START:      lxi   sp,RAMend       ; уст. указателя стека на конец ОЗУ

mvi   a,0h            ; (A) <- 00

out   Pout1           ; выкл все выходы

out   Pout2           ; выкл все выходы

out   Pout3           ; выкл все выходы

out   Pout4           ; выкл все выходы

out   IndSegs         ; погасить

out   IndCol          ; индикаторы

lxi   h,Counter

mov   M,a

inx   h

mov   M,a

inx   h

mov   M,a             ; обнулим счетчик людей