Protues8253实验报告Word格式.docx
《Protues8253实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《Protues8253实验报告Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
![Protues8253实验报告Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/24/0a1a2efe-3696-4818-85aa-8dfe6c696577/0a1a2efe-3696-4818-85aa-8dfe6c6965771.gif)
1.硬件
(1)74HC138译码电路如图所示,A15为1,E2、E3接地保证74HC138正常工作,此时
、
对应地址分别为8000H、9000H、0A000H.
(2)8259的片选地址为9000H,所以
接
8086有16位数据总线,其低8位作为偶存储体来传输数据,8086的A0要一直为0,所以8259的A0要接8086的A1
IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz),所以8259的IR2端与8253的OUT1端相连。
(3)74LS273的片选地址为8000H,且需要向其写入LED灯的状态,则
和
经或非门后接入CLK。
(4)8253的片选地址为A000H,所以
。
CLK0接入1MHz信号,GATE0与GATE1同时接电源,OUT0输入到CLK1,OUT1经分频输出1HZ的信号。
2.软件
(1)流程图
(2)与8259A有关的设置
18259A初始化(ICW)
据要求(上升沿触发、单片、全嵌套、非缓冲、普通中断结束方式、需设置ICW4,中断类型号为80H—87H),初始化:
ICW1=13H(00010011B);
写入偶地址端口9000H
ICW2=08H(00001000B);
写入奇地址端口9002H
ICW4=01H(00000001B);
2中断屏蔽字(OCW1)(写入奇地址端口9002H)
允许IR2中断OCW1与0FBH(11111011B)相与
禁止IR2中断OCW1与04H(00000100B)相或
3中断结束字(OCW2)(写入偶地址端口9000H)
OCW2=20H(00000010B)
(3)与8253有关的设置
计数器0
计数器1
1MH
计数器
z
1KHz
1Hz
1MHZ要分频为1HZ至少需要两个计数器。
可考虑如下分频方式:
计数器0选用工作方式3(方波),计数器0控制字为37H(00110111B)(写入控制寄存器端口0A006H);
计数器0预置值为1000H,BCD计数。
(写入计数器0端口地址0A000H)
计数器1选用工作方式2(分频),计数器1控制字为75H(01110101B)
(写入控制寄存器端口0A006H);
计数器1预置值为1000H,BCD计数。
(写入计数器1端口地址0A002H)
三.源程序及注释
CODESEGMENT;
"
CODE"
逻辑段开始
ASSUMECS:
CODE
START:
CLI;
关中断
;
8253A初始化
MOVDX,0A006H;
控制器地址0A006H
MOVAL,37H;
计数器0选用工作方式3(方波)
OUTDX,AL;
写计数器0工作方式
MOVDX,0A000H;
计数器0地址0A000H
MOVAL,00H;
计数器0预置值为1000H
OUTDX,AL
MOVAL,10H
MOVAL,75H;
计数器1选用工作方式2(分频)
写计数器1工作方式
MOVDX,0A002H;
计数器1地址0A002H
计数器1预置值1000H
8259初始化
MOVDX,9000H;
ICW1=13H(00010011B)
MOVAL,13H
MOVDX,9002H;
ICW2=80H(10000000B)
MOVAL,80H
ICW3=01H(00000001B)
MOVAL,01H
非规装入地址向量
MOVAX,0
MOVDS,AX
MOVBX,82H*4
MOVAX,OFFSETINTP
MOV[BX],AX
INCBX
MOVAX,SEGINTP
MOVDX,9002H;
允许IRQ2中断
INAL,DX
ANDAL,0FBH
MOVDX,8000H
LED灯初始化全灭
MOVBL,1;
设置灯初始状况
MOVCX,8;
设置中断次数为8
STI
L1:
MOVAL,82H;
Proteus中8086模型有问题,它取得的中断号是最后发到总线上的数据,并不是由8259发出的中断号
MOVDX,0B000H
所以造成了要在这里执行EOI的假相,地址使用没有用过的,如b000h,8259的地址是9000h
CMPCX,0
JZQUIT
JMPL1;
等待中断
QUIT:
CLI;
禁止IRQ2中断
ORAL,4
STI;
开中断
MOVCX,0FFFFH
L:
LOOPL;
为看到第8次中断结束后LED灯亮,需用延时
8次中断结束,LED灯全灭
JMP$
INTPPROC;
中断服务子程序
MOVAL,BL
ROLBL,1
DECCX
MOVDX,9000H
MOVAL,20H;
发中断结束命令EOI
IRET;
中断返回
INTPENDP
CODEENDS
ENDSTART;
汇编结束
四.运行结果
第一次来一个上升沿,申请中断一次,CPU响应后通过输出接口74LS273使发光二极管亮,第1次中断,LED0亮。
以后每来一个上升沿,LED灯依次亮灭,直到计数到8为止。
最后LED灯全灭
五.实验思考
1.为什么程序退出后,8253仍在输出方波信号?
8253的GATE0和GATE1仍接在电源上,而且8253的控制字没有重新写入,所以8253没能复位清零。
2.如果要将8253复位,该如何修改程序?
向控制寄存器重新写入控制字
MOVDX,0A006H
MOVAL,37H
OUTDX,AL
MOVAL,75H
OUTDX,AL