一、实验目的
- 掌握可编程并行接口芯片8255的工作原理及初始化方法
- 掌握8255在实际应用中的硬件连接及编程应用
二、实验要求
根据实验室现有条件,针对实验任务,设计实验方案并进行实现。
三、实验内容
启动0#计数器,每计5个数(计数时钟用脉冲源产生),产生一次中断,在中断服务程序中,启动1#计数器工作,用其输出控制灯按照10HZ的频率闪烁。同时检测开关状态,当某一开关合上时将对应编号的指示灯点亮,开关断开时将对应的指示灯熄灭。控制灯闪烁5秒钟(用软件延时实现定时)后,停止1#计数器工作,普通中断结束。
四、实验线路图
五、实验程序清单
CSEG SEGMENT
ORG 100H
ASSUME CS:CSEG
START:CLI;关中断
;8259初始化
MOV DX,04A0H
MOV AL,13H;0001 0011,边沿触发方式,单片方式,要写入ICW4
OUT DX,AL;ICW1
MOV AL,20H;0010 0000,设置中断向量号
ADD DX,2
OUT DX,AL;ICW2
MOV AL,01H;0000 0001
OUT DX,AL;ICW4
;中断向量设置
PUSH DS
MOV AX,0
MOV DS,AX
MOV SI,27h*4
MOV AX ,offset INTP
MOV [SI],AX
INC SI
INC SI
MOV AX,100H
MOV [SI],AX
POP DS
;开放IR7中断
MOV AL,7FH
OUT DX,AL;OCW1
;8255初始化
MOV AL,10000010B;A方式0,输出,B方式0,输入,C方式0,输出
MOV DX,04C6H
OUT DX,AL
;8253初始化
mov al,00010101b;计数器0,只读写低字节,方式二,十进制
mov dx,04b6h
out dx,al
Mov al,05h
Mov dx,04b0h
Out dx,al
MOV AL,00H
MOV DX,04C0H
OUT DX,AL
mov al,01110110b;计数器1,先低后高,方式三,二进制
mov dx,04b6h
out dx,al
Mov ax,37500
Mov dx,04b2h
out dx,al
mov al,ah
out dx,al
STI;开中断
WAITI:JMP WAITI;等待中断
INTP:mov al,01h
mov dx,04C0h
out dx,al
MOV DX,04C2H
IN AL,DX
MOV DX,04C4H
OUT DX,AL
Mov bx,10
dey: mov cx,0
agn: dec cx
jnz agn
dec bx
jnz dey
mov al,00h
mov dx,04C0h
out dx,al
MOV AL,20H
MOV DX,04A0H
OUT DX,AL
IRET
CSEG ENDS
END START
六、实验结论及总结
通过此次实验,我对8253,8255,8259的理解更加深刻了:8255提供了三个端口A,B,C,我们可以利用简单的方式0工作方式实现对端口输入输出的控制,在本次实验中,我利用8255来读取开关状态,并反映到对应的灯的状态上,8255还起到了对8253的计时器1的门控信号的控制作用。8253定时计数器有6种工作方式,在本次实验中,我利用了方式2与方式3,分别实现了对产生中断的控制与灯闪烁频率的控制。8259是中断控制器,一片8259A可以管理8级中断,每一级中断都可单独被屏蔽或允许。三者配合使用,能完成许多基本功能。
在实验一开始,心里还是有点没底的,因为无法使用试验台验证,只能凭自己的逻辑进行判断。但在温习ppt过后,自己开始动手写程序的过程中,随着问题被一一克服,我对实验的认识逐渐深刻,对程序的书写与修改逐渐熟练起来。
在本次实验中,我对遇到的问题总结如下:
1.一开始对于8253计数器的工作方式确定不下来,有考虑到方式0的使用,但是对于两个计数器:计数器0要不断地产生脉冲,进而产生中断,不能只产生一次中断就结束了,否定。计数器1控制灯的闪烁频率,同样也不能只闪一下就结束,这样也不好观察,否定。最后决定计数器0采用方式2,计数器1要控制灯闪烁的频率,所以采用方波发生器——方式3。
2.第二个问题是如何控制计数器开始与结束计数的时间。对于计数器0,因为计数器0的功能其实就是对中断产生的控制,所以可以不用门控信号操控计数器0,而利用开关中断实现。对于计数器1,我们可以在一开始给GATE1低电压,并在中断子程序开始处给其高电压使其开始工作,在中断子程序结尾处给低电压结束其工作。
3.关于中断,在程序一开始处cli关中断,在中断子程序前sti开中断,以此来完成对中断的控制。在8259初始化后记得要开放IR7中断(OCW1),在中断子程序结束时写入中断结束字(OCW2)。
经过反复的思考最终设计出了实验线路图与实验程序,它们完成的功能并不复杂,也可以说是很基础。但正是由这些基础的内容互相配合,交互进行,才得以完成更复杂的功能。我们需要对这些知识理解并加以掌握,才能为我们去研究更复杂的内容奠定牢固的基础。