正文描述:《中断优先级与中断响应时间中断优先级与中断响应时间中...》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、中断优先级与中断响应时间渤海三叠浪lch_29@163.com2009-12-2KeilC51.exeV8.18晶振22.1184Mhz看如下程序调试:::(((图(图图图1)))要注意到:(1)程序中将“串口设置为高优先级别”这句话注销了(2)定时器是16位手动装载,每4ms进入中断一次!事实上啥方式、啥时间都无所谓,因为下面所讨论的问题都是以us(机器周期)为单位的。(3)调试时,要用软件调试,因为硬件调试时可能会不准确,比如说晶振本身的误差。要用stepinto进行单步调试,并且软件优化级别设置为0分析:main里面令EA=1,也就是将串口中断和定时器1中断同时
2、打开(哪个先打开与RI=TRUE和TF0=TRUE这两句话的语句次序无关,可以交换位置看看就知道了),那么首先进入的是定时器中断。因为在相同的优先级下(系统复位后,IP=0xx00000,也就是都是低优先级),先响应优先次序高的中断(定时器0的优先顺序序号是2,而串口的序号是5)。在执行完EA=1后,又执行了I=1;那么为什么不是执行E=1后马上执行中断服务程序Timer_Serve里面的语句呢?这就引出了另一个概念——中断响应时间。就是说硬件置位中断请求标志位后(当然咱这里是用软件置位的标志位来模拟硬件置位标志位),需要一定的时间(最快3个机器周期,一般小于8个机器
3、周期)才会进入中断程序。(孙育才《MCS-51系列单片微型计算机及其应用(第三版)P145页》(第一版1986年/第二版1989年/第三版1997年)),或者看哈工大的张毅刚的书,书中也讲了相同的内容。接着继续单步调试(((图(图图图2)))执行完后定时器0中断后,没有直接进入串口中断,而是返回了while里面。为什么呢?当然还是中断响应需要时间了!预计再执行几个i=1就会进入串口中断了!继续单步调试(((图(图图图3)))果然又执行了两个i=1就进入了串口中断继续单步调试(((图(图图图4)))现在设置不同的优先级别看看调试情况将串口中断优先级别设置为高(((图(图
4、图图5)))继续(((图(图图图6)))----------------------------下图是图图图7-----------------------------仔细看看下一步执行的是啥???图?图图图8看出高优先级的威力的吧!!!执行了定时器中断程序的RI=TRUE后后后,后,,,没有执行没有执行TH0和和和TL0的赋值就迫不及待的进入了串口中断了。。。这说明了。这说明了:::(((1))))串口优先级别是高级别串口优先级别是高级别,,,而定时器中断是低级别,而定时器中断是低级别。。。假如两个都是低级别或。假如两个都是低级别或者定时器高级别,,,串口低级别,串
5、口低级别,,,那么肯定是执行了,那么肯定是执行了TH0和和和TH1赋值后,,,再可能经过更长的响应时间(((就是说可能会跳到(就是说可能会跳到while里面执行i=1),再再再进入串口中断服务程序的。。。(((2))))由于串口设置了高优先级,,,串口中断响应时间变短了,串口中断响应时间变短了(((当然响应时间和编(当然响应时间和编译器的编译能力有关,,,如果编译器的优化级别设置,如果编译器的优化级别设置更高,,,响应时间可,响应时间可能更短,,,因为响应时间和汇编指令有关,因为响应时间和汇编指令有关)))。)。。。因为因为:::如果响应时间:如果响应时间长长长,长,
6、,,那么肯定会先执行那么肯定会先执行TH0和和和TH1的的的赋值的赋值语句的。。。[注注注]:::要将:要将本文中的while里面的i=1换成_nop_,并根据生成的反汇编指令和每条指令执行的时间就会得出更精确的调试结论,,,也,也也也可以看出软件仿真是多么的强大-----竟然精确到1us。。。渤海三叠浪2009-12-2
显示全部收起
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。