return: ret
;подпрограмма задержки
zader: lxi h,pov ;*
zader1: in portc ;**
ani kod1 ;**
jz zader2 ;**
mvi c,povdr ;
vvod1: in portc ;
ani kod1 ;
jz zader2 ;
dcr c ;
jnz vvod1 ;
in portc ;
push h ;
lxi h,klav ;
mov m,a ;
pop h ;
vvod0: mvi c,povdr ;
vvod2: in portc ;
ana a ;
jnz vvod0 ;
dcr c ;
jnz vvod2 ;
pop h ;
jmp creg ;была нажата нужная клавиша, выход из подпрограммы (переход на вызов подпрограммы режим)
zader2: dcx h ;**
mov a,h ;**
ora l ;**
jnz zader1 ;**
ret ;*
flag: db 0
klav: db 0
end
;принцип действия:
;происходит пересылка текущего состояния индикатора из регистра d в аккумулятор
;* смена состояния индикатора на противоположное осуществляется с помощью команды xri mask - исключающее или аккумулятора с данными (mask = 01101100)
;01100000(аккумулятор*) xri 01101100(mask) = 00001100 (00001100 xri 01101100 = 01100000) - полученное значение записывается в аккумулятор и сохраняется еще и в регистре d
;затем аккумулятор выводится на индикацию, вызывается b раз подпрограмма задержки, совершается переход на метку rstr и все повторяется заново до тех пор пока
;не будет нажата клавиша "останов" - 0 или смена режима
;* в данный момент в аккумуляторе хранится текущее состояние индикатора
расчет задержки на 1 секунду
одн(*) + мног(**)∙pov = 1738000
одн = 17+10+10=37 тактов
мног = 10+7+10+5+5+4+10=51 такт
pov = (1738000-Од)/Мн
pov = 1738963/51 = 34077
примечание: тактовая частота процессора установленного в стенде 1,738 Мгц
отсюда число 1738000
Кросс-ассемблер 80/85 ### Файл листинга lkr10.lst
Входной файл > lkr10.asm
Объектный файл > lkr10.obj
1 проход
2 проход
1 porta equ 80h ;адреса портов
2 portb equ 81h ;
3 portc equ 82h
4 porcrl equ 83h
5 pov equ 34077 ;постоянная времени на одну секунду
6 povdr equ 254 ;постоянная времени дребезга
7 kod equ 00001010b ;код режима через две секунды или через 5 секунд (клавиши "1" и "3")
8 kod1 equ 00001011b ;код обоих режимов и останова (клавиши "0", "1", "3")
9 mask equ 01101100b ;маска индикации
10 org 800h ;инициализация
11 0800 31 00 09 lxi sp,900h
12 0803 3E 89 mvi a,89h
13 0805 D3 83 out porcrl
14 0807 3E 60 begin: mvi a,01100000b
15 0809 D3 81 out portb ;инициализация регистров микропроцессора
16 080B 57 mov d,a
17 080C 0E FE reset: mvi c,povdr ;ожидание нажатия
18 ;защита от дребезга при нажатии
19 080E DB 82 vvod: in portc
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.