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

call  Recode7         ; перекодируем в семисег. код

sta   DispRAM         ; сохраним в VideoRAM

mov   a,b             ; восстановим

rrc                   ; сдвинем

rrc                   ; старшую тетраду

rrc                   ; на место

rrc                   ; младшей

ani   0Fh             ; выделим десятки

call  Recode7         ; перекодируем в семисег. код

sta   DispRAM+1       ; сохраним в VideoRAM

lda   Counter+1       ; возьмем 1000+100

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

ani   0Fh             ; выделим сотни

call  Recode7         ; перекодируем в семисег. код

sta   DispRAM+2       ; сохраним в VideoRAM

mov   a,b             ; восстановим

rrc                   ; сдвинем

rrc                   ; старшую тетраду

rrc                   ; на место

rrc                   ; младшей

ani   0Fh             ; выделим тысячи

call  Recode7         ; перекодируем в семисег. код

sta   DispRAM+3       ; сохраним в VideoRAM

lda   Counter+1       ; возьмем 100000+10000

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

ani   0Fh             ; выделим десятки тысяч

call  Recode7         ; перекодируем в семисег. код

sta   DispRAM+4       ; сохраним в VideoRAM

mov   a,b             ; восстановим

rrc                   ; сдвинем

rrc                   ; старшую тетраду

rrc                   ; на место

rrc                   ; младшей

ani   0Fh             ; выделим сотни тысяч

call  Recode7         ; перекодируем в семисег. код

sta   DispRAM+5       ; сохраним в VideoRAM

RET


;---------------------------------;           Recode7

; Преобразование к семисегментному коду.

; на входе в (A)- 2-код (<16), на выходе в (A) - семисегм. код

;---------------------------------Recode7:    push  h               ; сохраним (HL)

lxi   h,ZNAKOGEN

add   l               ; спозиц. по знакогенератору

mov   l,a

mvi   a,0

adc   h

mov   h,a

mov   a,M

pop   h               ; восстановим (HL)

RET                   ; выход с кодом в (A)

;---------------------------------;           ADD16

; 16-БИТНОЕ СЛОЖЕНИЕ.  HL=HL+DE

;---------------------------------ADD16:      MOV   A,L             ; 16-битное сложение

ADD   E

MOV   L,A

MOV   A,H

ADC   D

MOV   H,A

RET                   ; на выходе в (HL) - сумма

;---------------------------------;           TimerInit

;

;---------------------------------TimerInit:  mvi   a,00110110      ; инициализация таймера

out   PortT1          ; реж. 3, 2 байта, СТ0

mvi   a,9Ah           ; делитель 666=029Ah

out   PortT2          ; млад. байт

mvi   a,02h           

out   PortT2          ; старш. байт

TimerInit1: mvi   a,01010110      ; инициализация таймера

out   PortT1          ; реж. 3, мл. байт, СТ1

mvi   a,05h           ; делитель 05h

out   PortT2          ; млад. байт

TimerInit2: mvi   a,10010110      ; инициализация таймера

out   PortT1          ; реж. 3, мл. байт, СТ2

mvi   a,03h           ; делитель 03h

out   PortT2          ; млад. байт

RET


;---------------------------------;           INC10

; 2-10 инкремент счетчика людей

;---------------------------------INC10:      lxi   h,Counter       ; указатель на счетчик в ОЗУ

mov   a,M             ; возьмем мл. байт

inr   a               ; инкремент

daa                   ; дес. коррекция

mov   M,a             ; сохранение

inx   h

mov   a,M

aci   0               ; сложение с переносом

daa

mov   M,a

inx   h

mov   a,M

aci   0               ; сложение с переносом

daa

mov   M,a

RET                   ; все.

end


4. Описание принципиальной схемы

При включении питания процессор начинает выполнение программы с адреса 00000Н. После этого процессор начинает работать по программе, заложенной в ПЗУ.

В самом начале проводится тест всей системы, а затем процессор работает исключительно по прерываниям. Это обеспечивается при помощи таймера (DD13), который задаёт интервалы времени для динамической индикации дисплея (RST7.5) и контроля состояния турникетов (RST6.5). Из входной частоты 1МГц, которая подаётся с микропроцессора на вход CLC0, формируется частота 1,5кГц (OUT0), затем из неё вторым счётчиком формируется частота 300Гц на выходе OUT1 на дисплейное прерывание.