| |
|
实 验 报 告
实验名称 8253应用实验
课程名称 微机原理及应用 老 师
专业班级
姓 名
学 号
一 实验要求
在8259的IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz)。每来一个上升沿,申请中断一次,CPU响应后通过输出接口74LS273使发光二极管亮,第1次中断,LED0亮,第2次中断,LED1亮,…… 第8次中断,LED7亮,中断8次后结束。【要求273的片选地址为8000h,8259的片选地址为9000h,8253的片选地址为A000H】 二 思路 1. 硬件
(1)74HC138译码电路如图所示,A15为1,E2、E3接地保证74HC138正常工作,此时Y0、Y1、Y2对应地址分别为8000H、9000H、0A000H.
(2) 8259的片选地址为9000H,所以CS接Y1
8086有16位数据总线,其低8位作为偶存储体来传输数据,8086的A0要一直为0,所以8259的A0要接8086的A1
IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz),
所以8259的IR2端与8253的OUT1端相连。
(3)74LS273的片选地址为8000H,且需要向其写入LED灯的状态,则
Y0和WR经或非门后接入CLK。
(4)8253的片选地址为A000H,所以CS接Y2。
CLK0接入1MHz信号,GATE0与GATE1同时接电源,OUT0输入到CLK1,OUT1经分频输出1HZ的信号。
2. 软件 (1) 流程图
(2)与8259A有关的设置 ① 8259A初始化(ICW)
据要求(上升沿触发、单片、全嵌套、非缓冲、普通中断结束方式、需设置ICW4,中断类型号为80H—87H),初始化: ICW1=13H(00010011B);写入偶地址端口9000H ICW2=08H(00001000B);写入奇地址端口9002H ICW4=01H(00000001B);写入奇地址端口9002H ② 中断屏蔽字(OCW1)(写入奇地址端口9002H) 允许IR2中断 OCW1与0FBH(11111011B)相与 禁止IR2中断 OCW1与04H(00000100B)相或 ③ 中断结束字(OCW2)(写入偶地址端口9000H) OCW2=20H(00000010B) (3) 与8253有关的设置
1MHZ要分频为1HZ至少需要两个计数器。可考虑如下分频方式: 计数器0选用工作方式3(方波),计数器0控制字为37H(00110111B)(写入控制寄存器端口0A006H);计数器0预置值为1000H,BCD计数。(写入计数器0端口地址0A000H)
1Hz计数器1 1KHz计数器0 1MH 计数器1选用工作方式2(分频),计数器1控制字为75H(01110101B) (写入控制寄存器端口0A006H);计数器1预置值为1000H,BCD计数。 (写入计数器1端口地址0A002H) 三.源程序及注释
CODE SEGMENT ;\"CODE\"ASSUME CS:CODE START:
CLI ; ;8253A MOV DX,0A006H ; MOV AL,37H ; OUT DX,AL ; MOV DX,0A000H ; MOV AL,00H ; OUT DX,AL MOV AL,10H OUT DX,AL
逻辑段开始 关中断 初始化 控制器地址0A006H
计数器0选用工作方式3(方波) 写计数器0工作方式 计数器0地址0A000H 计数器0预置值为1000H MOV DX,0A006H ;控制器地址0A006H
MOV AL,75H ;计数器1选用工作方式2(分频) OUT DX,AL ;写计数器1工作方式 MOV DX,0A002H ;计数器1地址0A002H MOV AL,00H ; OUT DX,AL MOV AL,10H OUT DX,AL
;8259 MOV DX,9000H ;ICW1=13H(0001 0011B) MOV AL,13H OUT DX,AL
MOV DX,9002H ;ICW2=80H(1000 0000B) MOV AL,80H OUT DX,AL
MOV DX,9002H ;ICW3=01H(0000 0001B)
计数器1预置值1000H 初始化
MOV AL,01H OUT DX,AL
;非规范装入地址向量 MOV AX,0 MOV DS,AX MOV BX,82H*4 MOV AX,OFFSET INTP MOV [BX],AX INC BX INC BX
MOV AX,SEG INTP MOV [BX],AX
MOV DX,9002H ; IN AL,DX AND AL,0FBH OUT DX,AL
允许IRQ2中断 MOV DX,8000H
MOV AL,00H ;LED灯初始化全灭 OUT DX,AL
MOV BL,1 ;设置灯初始状况 MOV CX,8 ;设置中断次数为8 STI
L1:MOV AL,82H ; Proteus中8086模型有问题,它取得的中断号是最后发到总线上的数据,并不是由8259发出的中断号
MOV DX,0B000H
OUT DX,AL ;所以造成了要在这里执行EOI的假相,地址使用没有用过的,如b000h,8259的地址是9000h CMP CX,0 JZ QUIT
JMP L1 ;等待中断 QUIT:CLI ;关中断 MOV DX,9002H ;禁止IRQ2中断
IN AL,DX OR AL,4 OUT DX,AL
STI ;开中断 MOV CX,0FFFFH
L: LOOP L ;需用延时
MOV DX,8000H
MOV AL,00H ;8 OUT DX,AL JMP $
INTP PROC ; MOV AL,BL MOV DX,8000H OUT DX,AL ROL BL,1
为看到第8次中断结束后LED灯亮,次中断结束,LED灯全灭 中断服务子程序 DEC CX MOV DX,9000H
MOV AL,20H ;发中断结束命令EOI OUT DX,AL
IRET ;中断返回 INTP ENDP
CODE ENDS
END START ;汇编结束 四.运行结果
第一次来一个上升沿,申请中断一次,CPU响应后通过输出接口74LS273使发光二极管亮,第1次中断,LED0亮。
以后每来一个上升沿,LED灯依次亮灭,直到计数到8为止。
最后LED灯全灭
五.实验思考
1.为什么程序退出后,8253仍在输出方波信号?
8253的GATE0和GATE1仍接在电源上,而且8253的控制字没有重新写入,所以8253没能复位清零。 2.如果要将8253复位,该如何修改程序? 向控制寄存器重新写入控制字
MOV DX,0A006H MOV AL,37H
OUT DX,AL
MOV DX,0A006H MOV AL,75H OUT DX,AL
因篇幅问题不能全部显示,请点此查看更多更全内容