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 на дисплейное прерывание.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.