【微机原理与汇编语言】并行接口8255实验

一、实验目的

  1. 掌握可编程并行接口芯片8255的工作原理及初始化方法
  2. 掌握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)。

经过反复的思考最终设计出了实验线路图与实验程序,它们完成的功能并不复杂,也可以说是很基础。但正是由这些基础的内容互相配合,交互进行,才得以完成更复杂的功能。我们需要对这些知识理解并加以掌握,才能为我们去研究更复杂的内容奠定牢固的基础。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 05:30:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 05:30:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 05:30:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 05:30:07       20 阅读

热门阅读

  1. 甜蜜约会网页制作html

    2024-06-06 05:30:07       8 阅读
  2. AWK使用总结

    2024-06-06 05:30:07       8 阅读
  3. 鲁教版八年级数学上册-笔记

    2024-06-06 05:30:07       9 阅读
  4. 有多少苹果用来分赃

    2024-06-06 05:30:07       9 阅读
  5. 枚举类型知识点

    2024-06-06 05:30:07       10 阅读
  6. Linux中挂载Windows Samba共享的指南

    2024-06-06 05:30:07       9 阅读
  7. python基于百度,哈工大等停用表进行的中文分词

    2024-06-06 05:30:07       8 阅读
  8. 个人关于ChatGPT的用法及建议

    2024-06-06 05:30:07       9 阅读
  9. HCIA-HarmonyOS Device Developer 课程大纲

    2024-06-06 05:30:07       10 阅读
  10. Homebrew、RVM、ruby、cocoapods

    2024-06-06 05:30:07       10 阅读