求教:为何中断周期会延长?

[复制链接]
2963|9
 楼主| yyfsxs 发表于 2009-2-18 20:29 | 显示全部楼层 |阅读模式
采用TM0和BTM中断,周期分别为7.8125毫秒和250毫秒,第一次程序调试后,中断周期正常,后来将部分程序用宏指令代替,TMO中断周期则延长了30毫秒左右,不知道是不是宏指令的问题,还是其它原因?求教。
warm_ice 发表于 2009-2-19 08:53 | 显示全部楼层

这样

有2个方式可以查看一下:
1.程序编译后,会有一个.LST的文件,打开这个文件,看一下中断中的程序是否是比较长,导致多次中断只执行了一次.
2.仿真时设置一个适当的断点,全带运行后遇到断点程序会停下来,这时用CTRL+T调出TRACE的功能,会列出当前位置之前的8K的运行程序,看一下是什么影响了TM0中断的时间.
 楼主| yyfsxs 发表于 2009-2-19 14:50 | 显示全部楼层

找到问题了

按照版主的调试方法,找出问题的原因,每次中断程序运行都跳至主程序的最开始。见附图,如何才能解决?
warm_ice 发表于 2009-2-20 10:08 | 显示全部楼层

这样

如果是您说的情况,我估计是看门狗复位引起的,您检查一下是否打开了开门狗,并正确喂狗.
 楼主| yyfsxs 发表于 2009-2-20 15:02 | 显示全部楼层

在主程序中,我是设了看门狗的,但我关了之后再试还是一样会出现这种情况,程序运行中会出现无关字符,使中断周期变长。我估计是用了大量的宏,而引起的,我的宏定义是在ORG 0000H前,这个程序在没有用宏之前是调试好的,没有出现过这种问题,真让人头痛。
warm_ice 发表于 2009-2-21 13:35 | 显示全部楼层

这样

宏的位置放在前面没有问题,您再仔细检查一下,是否有在跨2K ROM附近使用了一些只能寻址2K范围的指令(例如:BA0,BA1,BA2,BA3,CALL等等).
linux123 发表于 2009-2-25 09:46 | 显示全部楼层

还是要把代码好好分析,才能找到问题

 楼主| yyfsxs 发表于 2009-3-5 09:21 | 显示全部楼层

找到问题了

原来我用INCLUDE指令将程序分成很多版块,用JMP指令跳转到另外版块,如果版块的JMP的LINE在要跳转的版块有同样的LIVE时,会转至跳转的版块中的LINE,然后再转至要跳的LABEL,中间就会出现图片中的那个问题.
warm_ice 发表于 2009-3-5 12:06 | 显示全部楼层

呵呵。找到问题就好

就像我在6楼讲的一样,这种地方是要特别注意的,编译器会有一个警告,但如果程序比较大,警告太多,您可能不会注意到。
小cat 发表于 2009-3-7 13:50 | 显示全部楼层

数据手册,你看看中断是怎么处理的?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

35

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部