可编程并行接口实验(8255A方式1)
实验目的
掌握8255A工作方式1的使用方法; 进一步掌握编写中断服务程序的方法。
实验内容
1. 8255A选通行输出实验,具体要求:
(1) 设置8255A的A 口工作在方式1输出;
(2) 每按一次单脉冲按钮产生一个正脉冲使8255A产生一次中断;
(3) 设计中断服务程序:依次输出01H,02H,04H,08H,10H,20H,40H,80H。
使L0—L7依次发光。
2. 8255A选通行输入实验,具体要求:
(1) 设置8255A的A 口工作在方式1输入;
(2) 每按一次单脉冲按钮产生一个正脉冲使8255A产生一次中断;
(3) 设计中断服务程序:读取开关表示的ASCII码,在屏幕上显示其对应的字符。
实验连线
1
实验内容1连线
(1)8255A芯片的A口PA7~PA0连发光二极管L7~L0; (2)PC3连接IRQ;
(3)PC6连接单脉冲发生器。 实验内容2连线
(1)8255A芯片的A口PA7~PA0连逻辑开关K7~K0; (2)PC3连接IRQ;
(3)PC4连接单脉冲发生。
2
流程图
开始关中断设置TPC卡中断使能得到原中断向量并保存设置新中断使能设置中断屏蔽寄存器开中断N按任意键Y恢复中断使能恢复中断屏蔽寄存器设置TPC卡中断关闭这是试验2的流程图,实验1相似
中断开始寄存器进栈开中断点亮发光二极管发出EOI结束中断开关断寄存器出栈中断结束
实验代码
试验2的代码是在试验1的代码基础上稍作改动,这里只列出试验2的代码: ASSUME CS:CODE,DS:DATA
DATA SEGMENT ;数据段定义 IOPORT EQU 5400H-280H
IOPORT_CENT EQU 5000H ;9054芯片的I/O起始地址 MASKZ EQU 0FBH ;8259A主片屏蔽码 MASKC EQU 0F7H ;8259A从片屏蔽码 INTNUM DW 0 ;保存ES的定义量 INTNUMSE DW 0 ;保存BX的定义量 DATA ENDS
STACK1 SEGMENT STACK ‘STACK1’ DB 50 DUP(?) STACK1 ENDS
CODE SEGMENT ;代码段定义 START:
MOV DX,IOPORT+28BH ;根据实验连线,此次实验控制口为540BH MOV AL,0B0H ; 设置8255A的控制关键字(设置成方式1,端口A输入) OUT DX,AL
CLI ;关中断
MOV DX,IOPORT_CENT+68H ;设置9054芯片使能寄存器 IN AX,DX OR AX,0900H OUT DX,AX
;得到原中断向量并保存
MOV AH,35H ;取中段向量
MOV AL,73H ;针对本台计算机查表得出中断类型号为73H INT 21H
MOV INTNUMSE,BX ;保存BX MOV AX, ES ;保存ES MOV INTNUM, AX
;设置新中断向量
MOV AX,CS MOV DS,AX
MOV DX,OFFSET INTPROC ;设置新的中断向量 MOV AL,073H MOV AH,25H INT 21H
;设置中断屏蔽寄存器
IN AL,21H ;8259A主片的中断屏蔽寄存器端口地址为21H AND AL,MASKZ ;中断屏蔽寄存器中主片相应位置1,本实验中第三位置1 OUT 21H,AL
IN AL,0A1H ;8259A从片的中断屏蔽寄存器端口地址为0A1H AND AL,MASKC
OUT 0A1H,AL ;中断屏蔽寄存器中从片相应位置1,本实验中第四位置1
STI ;开中断
MOV AL,00001001B ;设置PC4为1 MOV DX,IOPORT+28BH OUT DX,AL
OUTER:
MOV AH,01H ;判断是否有任意键按下 INT 16H
JZ OUTER ;没有键按下程序重复
MOV AX, INTNUM ;恢复原中断向量 MOV DS,AX
MOV DX, INTNUMSE MOV AL,073H MOV AH,25H INT 21H
;恢复中断屏蔽寄存器 IN AL,21H OR AL,04H OUT 21H,AL IN AL,0A1H OR AL,08H OUT 0A1H,AL
MOV DX,IOPORT_CENT+68H ;关闭9054 IN AX,DX
OR AX,0F6FFH OUT DX,AX
MOV AH,4CH ;有键按下,程序结束,返回DOS界面 INT 21H
;中断服务子程序
INTPROC:
PUSH AX ;寄存器入栈保护 PUSH BX PUSH CX PUSH DX PUSH DS
STI ;开中断 MOV CX,0FFFFH H: LOOP H
MOV DX,IOPORT+288H ;A口输入 IN AL,DX
MOV DL,AL ;输出开关所对应的字符 MOV AH,02H INT 21H
MOV AL,20H ;发出EOI结束中断 OUT 20H,AL OUT 0A0H,AL
CLI ;关中断
POP DS ;寄存器出栈 POP DX POP CX POP BX POP AX
IRET ;中断返回 CODE ENDS
END START
结果描述
试验1:每按一次单脉冲,L0~L7依次发光。
试验2:每按一次单脉冲,读取开关表示的ASCII码,在屏幕上显示其对应的字符。
因篇幅问题不能全部显示,请点此查看更多更全内容