描述:用8255A的C口,控制红绿灯的亮灭,a口和b口,控制数码管倒计时,通过控制延时和反复送值让数值看起来连续显示并间隔一秒(不反复送值,数字是不会同时出现的。。。),本人水平有限未使用定时器。。。
data segment
io8255c equ 28ah
io8255con equ 28bh
io8255a equ 288h
io8255b equ 289h
portc1 db 24h,44h,04h,44h,04h,44h,04h
db 81h,82h,80h,82h,80h,82h,80h
db 0ffh
led1 db 4fh,5bh,5bh,5bh,5bh,5bh,5bh,5bh,5bh,5bh,5bh,06h
db 06h,06h,06h,06h,06h,06h,06h,06h,06h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h,00h
db 0ffh
led2 db 3fh,6fh,7fh,07h,7dh,6dh,66h,4fh,5bh,06h,3fh
db 6fh,7fh,07h,7dh,6dh,66h,4fh,5bh,06h,3fh
db 6fh,7fh,07h,7dh,6dh,66h,4fh,5bh,06h,3fh
led3 db 4fh,5bh,06h
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,io8255con
mov al,80h
out dx,al
mov si,0
re_on: mov bx,0
on: mov al,portc1[bx]
mov dx,io8255c
cmp al,0ffh
jz re_on
out dx,al
inc bx
push bx
mov cx,200
test al,21h
jz de3
mov cx,500
mov bx,0
Y :
push cx
mov cx,100
mov al,led1[bx]
cmp al,0ffh
jz T
mov dx,io8255a
out dx,al
mov dx,io8255b
mov al,02h
out dx,al
Delay1 : loop Delay1
mov al,00h
out dx,al
mov cx,100
mov al,led2[bx]
mov dx,io8255a
out dx,al
mov dx,io8255b
mov al,01h
out dx,al
Delay2 : loop Delay2
mov al,00h
out dx,al
pop cx
loop Y
inc bx
mov cx,500
jmp Y
de3 : test al,42h
push cx
jz G
cmp si,3
jz d
mov al,led3[si]
mov dx,io8255a
out dx,al
mov dx,io8255b
mov al,05h
out dx,al
jmp f
d:
mov si,0
mov al,led3[si]
mov dx,io8255a
out dx,al
mov dx,io8255b
mov al,05h
out dx,al
f: inc si
de4: mov di,60000
de5: dec di
jnz de5
loop de4
jmp T
G: de6: mov di,9000
de7: dec di
jnz de7
loop de6
T :
pop cx
pop bx
push dx
mov ah,06h
mov dl,0ffh
int 21h
pop dx
jnz exit
jmp on
exit: mov ah,4ch
int 21h
code ends
end start