8259多中断源实现

mh19919697 2012-12-12 11:42:33
通过IR4实现,IR4上接收到一个中断信号,使8255驱动的发光二极管从左到右移一位,每次只亮一个。
如何对下面的代码作出修改?
CODE SEGMENT
ASSUME CS:CODE
ORG 02000
START0:
JMP START1
PA EQU 0FF20H ;字位口
PB EQU 0FF21H ;字形口
KPB EQU 0FF29H ;扩展8255PB口
KCTL EQU 0FF2BH ;扩展8255控制端口
A82591 EQU 0FF80H ;8259地址1
A82592 EQU 0FF81H ;8259地址2
DISCODE DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H
CNT DB 00H
BAIWEI DB 80H
SHIWEI DB 80H
GEWEI DB 80H
START1:
CLI
MOV AL,86H ;初始化扩展8255
MOV DX,0FF2BH
OUT DX,AL
MOV AL,05H ;开放PB口输入中断
OUT DX,AL

MOV AL,13H ;初始化8259
MOV DX,A82591
OUT DX,AL
MOV AL,08H
MOV DX,A82592
OUT DX,AL
MOV AL,09H
OUT DX,AL

MOV AL,0BH ;初始化中断向量表
MOV AH,0
SHL AX,2
MOV SI,AX
MOV AX,SEG INPUTP
MOV [SI+2],AX
MOV AX,OFFSET INPUTP
MOV [SI],AX

MOV AL,0f7H ;开中断
MOV DX,A82592
OUT DX,AL
STI
MOV AX,0000H
MOV DS,AX
L1: MOV AL,BAIWEI ;显示百位数
MOV DX,PB
OUT DX,AL
MOV AL,0DFH
MOV DX,PA
OUT DX,AL
CALL DELAY

MOV AL,SHIWEI ;显示十位数
MOV DX,PB
OUT DX,AL
MOV AL,0EFH
MOV DX,PA
OUT DX,AL
CALL DELAY

MOV AL,GEWEI ;显示个位数
MOV DX,PB
OUT DX,AL
MOV AL,0F7H
MOV DX,PA
OUT DX,AL
CALL DELAY
STI
JMP L1
JMP L1
DELAY PROC
PUSH AX
PUSH CX
MOV CX,001H
L3: MOV AX,056CH
L4: DEC AX
JNZ L4
LOOP L3
POP CX
POP AX
RET
DELAY ENDP

INPUTP PROC
PUSH AX
PUSH DX
PUSH SI
STI
MOV DX,0FF29H
IN AL,DX

LEA SI,DISCODE
MOV AH,00H
MOV DL,100
DIV DL
PUSH SI
PUSH AX
MOV AH,00H
ADD SI,AX
MOV AL,[SI]
MOV BAIWEI,AL

POP AX
POP SI
MOV AL,AH
MOV AH,00H
MOV DL,10
DIV DL
PUSH SI
PUSH AX
MOV AH,00H
ADD SI,AX
MOV AL,[SI]
MOV SHIWEI,AL

POP AX
POP SI
MOV AL,AH
MOV AH,00H
ADD SI,AX
MOV AL,[SI]
MOV GEWEI,AL
MOV AL,20H
MOV DX,A82591
OUT DX,AL
POP DX
POP AX
POP SI
IRET
INPUTP ENDP
CODE ENDS
END START0
...全文
215 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧