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

mov   h,b             ; если четный

mov   l,c             ; то сдвинем ст.тетраду

dad   h               ; на сторону младшей

dad   h

dad   h

dad   h

mov   b,h

mov   c,l             ; и загрузим назад в (BC)

LowTetr:    rlc                   ; умножаем (A)*16

rlc

rlc

rlc                   ; умножили на 16

mov   e,a

mvi   d,0

lxi   h,Open1-16      ; и прибавим к базе

call  ADD16           ; спозиц. на нужныйпорт

mov   a,c             ; проинвертируем что было в (C)

cma

mov   c,a             ; назад в (C)

pchl                  ; прыгнем на Open...

Open1:      lda   Mirror1         ; зеркало вых. на 1 и 2 турникет

ora   b               ; вкл чего надо (1)

ana   c               ; выкл чего не надо (1)

sta   Mirror1         ; запомнить в зеркале

out   Pout1           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open2:      lda   Mirror1         ; зеркало вых. на 1 и 2 турн.

ora   b               ; вкл чего надо (2)

ana   c               ; выкл чего ненадо (2)

sta   Mirror1         ; запомнить в зеркале

out   Pout1           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open3:      lda   Mirror2         ; зеркало вых. на 1 и 2 турникет

ora   b               ; вкл чего надо (1)

ana   c               ; выкл чего не надо (1)

sta   Mirror2         ; запомнить в зеркале

out   Pout2           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open4:      lda   Mirror2         ; зеркало сост. на 1 и 2 турн.

ora   b               ; вкл чего надо (2)

ana   c               ; выкл чего ненадо (2)

sta   Mirror2         ; запомнить в зеркале

out   Pout2           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open5:      lda   Mirror3         ; зеркало вых. на 1 и 2 турникет

ora   b               ; вкл чего надо (1)

ana   c               ; выкл чего не надо (1)

sta   Mirror3         ; запомнить в зеркале

out   Pout3           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open6:      lda   Mirror3         ; зеркало вых. на 1 и 2 турн.

ora   b               ; вкл чего надо (2)

ana   c               ; выкл чего ненадо (2)

sta   Mirror3         ; запомнить в зеркале

out   Pout3           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open7:      lda   Mirror4         ; зеркало вых. на 1 и 2 турникет

ora   b               ; вкл чего надо (1)

ana   c               ; выкл чего не надо (1)

sta   Mirror4         ; запомнить в зеркале

out   Pout4           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET

nop                   ;

nop                   ;

nop                   ;

nop                   ; выравн. до 16 байт

Open8:      lda   Mirror4         ; зеркало вых. на 1 и 2 турн.

ora   b               ; вкл чего надо (2)

ana   c               ; выкл чего ненадо (2)

sta   Mirror4         ; запомнить в зеркале

out   Pout4           ; вывести в порт

pop   psw             ; восст. рег. (A)

RET


;---------------------------------;           TrToVRAM

; Обновление дисплейного RAM по содержимому счетчика людей.

;---------------------------------TrToVRAM:                         ;

lda   Counter         ; возьмем 10+1

mov   b,a             ; запомним

ani   0Fh             ; выделим единицы