请帮我看下,另外具体怎么连接啊,我不太懂,要是帮我画个连接图就好了,我们硬件课程设计。 要求顺序点亮led灯,并用数码管显示哪个灯点亮,开关模拟故障,有故障时红外报警灯亮,中断执行,并显示哪个灯出现故障,故障排除继续,我不太会,谢谢大家了。
CONTROL EQU 20BH
COUNT0 EQU 208H
COUNT1 EQU 209H
COUNT2 EQU 20AH ;8253端口地址
code segment
assume cs:code,ds:data
data segment
SUM DB 1 DUP(?)
lksign DB 1 DUP(?)
data ends
start:
MOV AL, 00110111B ; 计数器0,16位,先读/写低字节,后高字节,方式3,BCD
MOV DX, CONTROL
OUT DX, AL
MOV Al, 00H
MOV DX, COUNT0
OUT DX, AL ; 计数器低字节
MOV AL, 50H
OUT DX, AL ; 计数器高字节
MOV AL, 01110111B ; 计数器1,16位,先读/写低字节,后高字节,方式3,BCD
MOV DX, CONTROL
OUT DX, AL
MOV AL, 00H
MOV DX, COUNT1
OUT DX, AL ; 计数器低字节
MOV AL, 04H
OUT DX, AL ; 计数器高字节
; 定时初始设置
mov al,10010000b
mov dx,203h
out dx,al ;初始化8255
mov SUM,00H ;设定计数初值,此值可以改动
MOV AL,0FEH
MOV BL,0FEH
lp: ;计时累加模块,查看8255端口的信号,
call lok
call lok
MOV AL,BL
MOV DX,201H
OUT DX,AL
SHL AL,01H
MOV BL,AL
inc SUM
push ax
push bx
push dx
call show ;调用显示程序
pop dx
pop bx
pop ax
cmp SUM,08H
jnz lp
lok proc near
lk:
mov dx,200h
in al,dx ;读入8255a口的值
and al,10000000b ;开关K7接入PA7,按下后时钟暂停
cmp al,10000000b
jnz lk
mov dx,200h
in al,dx
and al,10000001b ;检测PA0 时钟信号,是否到一秒了
cmp al,lksign
jz lk
mov lksign,al
ret
lok endp
show proc near
mov dx,212h
mov al,0
out dx,al
mov al,38h
out dx,al;初始化8279
mov dx,210h
mov al,0
out dx,al
out dx,al
out dx,al
out dx,al
out dx,al
out dx,al
out dx,al
out dx,al;熄灭8279
mov al,SUM
mov ah,0
mov dl,10
div dl
mov bl,ah;将余数(即秒的个位)放在BL中
mov bh,al;将商(即秒的十位)放在BH中
call trans;调用8279显示秒的个位
mov bl,bh
call trans;调用8279显示秒的十位
call trans
call trans
mov dx,212h
mov al,0c2h;清空8279缓存
out dx,al
mov al,cl
ret
show endp
trans proc near;数码管显示程序
one:
cmp bl,1
jnz two
mov al,00000110b
two:
cmp bl,2
jnz tri
mov al,01011011b
tri:
cmp bl,3
jnz for
mov al,01001111b
for:
cmp bl,4
jnz fiv
mov al,01100110b
fiv:
cmp bl,5
jnz six
mov al,01101101b
six:
cmp bl,6
jnz sev
mov al,01111101b
sev:
cmp bl,7
jnz eit
mov al,00000111b
eit:
cmp bl,8
jnz nin
mov al,01111111b
nin:
cmp bl,9
jnz zro
mov al,01101111b
zro:
cmp bl,0
jnz shw
mov al,00111111b
shw:
mov dx,210h
out dx,al
ret
trans endp
CODE ENDS
END START
|