請幫我看下,另外具體怎么連接啊,我不太懂,要是幫我畫個連接圖就好了,我們硬件課程設計。 要求順序點亮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
|