您的当前位置:首页正文

Protues8253实验报告

2024-04-30 来源:步旅网
华北电力大学

| |

|

实 验 报 告

实验名称 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

因篇幅问题不能全部显示,请点此查看更多更全内容