一、实验内容
1.基本要求
掌握中断服务子程序设计及调用;编写一个简单功能外部中断服务子程序,通过手工设置中断位启动中断(服务子程序以本人学号后两位为正计数条件,计数达到则取反IO口P3.x引脚电压状态,其中x为本人学号后两位十进制数模8的结果);
2.扩展要求
设计扩展外部中断源数量的方法;
3.思考要求
观察中断优先关系,思考中断嵌套时的寄存器资源分配方法。
二、理论分析或算法分析中断系统实验,中断发生时,如何得到它的地址。
0000H:LJMP bgn
0003H:外部中断0,长度占了8个字节,如果程序短可以实现,默认中断返回指令
000BH:定时计数器0,占八个字节,中断返回
0013H:外部中断1,占八个字节,中断返回
001BH:定时计数器1,占八个字节,中断返回
0023H:串行通讯,占八个字节,中断返回
002BH:定时计数器2,占八个字节,中断返回
org 0030H 开始
bgn:
…….
外围部件:中断ea是允许哒,再单步
三、实现方法
四.实验结果分析
学号为27,然后模8等于33
执行过程
遇到的问题
(1)符号错误;
(2)表达语法错误;
解决办法
- 将,改为英文状态,
- 将seth改为setb;
五、结论
在本次实验中,完成了外部中断功能实验项目,掌握中断初始化的内容和中断子程序的结构,熟悉中断响应的过程和现场保护的意义,会正确运用堆栈指令作现场保护和现场恢复。
思考题:观察中断优先关系,思考中断嵌套时的寄存器资源分配方法。
中断的优先级有:查询优先级和执行优先级。当一个中断正在执行的时候,如果事先设置了中断优先级寄存器IP,那么当一个更高优先级的中断到来的时候会发生中断嵌套,如果没有设置则不会发生任何嵌套;
如果有同一个优先级的中断触发,它并不是在“不断的申请”,而是将它相应的中断标志位置即IE寄存器的某位置位,当CPU执行完当前中断之后,按照查询优先级重新去查询各个中断标志位,进入相应中断。
要记住,没有设置IP时,单片机会按照查询优先级来排队进入服务。如果要想让某个中断优先响应, 则要设置IP,更改执行优先级(或者说物理优先级)。要注意的是,当设置了IP后,当低执行优先级中断在运行时,如果有高执行优先级的中断产生,则会嵌套调用进入高执行优先级的中断。
×:无效位。
PS:串行I/O中断优先级控制位。PS=1,高优先级;PS=0,低优先级。
PTl:定时器/计数器1中断优先级控制位。PTl=1,高优先级;PTl=0,低优先级。
PXl:外部中断1中断优先级控制位。Pxl=1,高优先级;PXl=O,低优先级。
PT0:定时器/计数器o中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。
Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,低优先级。