打印

一个困扰我很久的问题

[复制链接]
8330|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elic|  楼主 | 2008-7-14 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在我的主程序中有个20MS的循环,用定时器T0定时的,其中FLAG最低位为20MS到标志,程序如下:

NOP
JNB       FLAG,0,$-1      ;20MS时间检测
ANDIM     FLAG,1110B      ;清20MS到标志

;T0定时中断子程序
T0_ISP:
    STA    AC_BAK        ;保护AC
    ANDIM    IRQ,1011B        ;清T0中断请求标志
    ORIM    FLAG,0001B    ;置20MS到标志
    LDI    T0L,0100B        ;重装计数初值    
    LDI    T0H,0110B    
    ORIM    IE,0101B        ;开总中断允许    
    LDA    AC_BAK        ;恢复AC    
    RTNI


遇到的问题:
在正常的情况下,此程序没问题,可如果我点停止运行后,会始终停留在
NOP
JNB       FLAG,0,$-1      ;20MS时间检测
这两条语句上,当我在
ANDIM     FLAG,1110B 
设定一个断点后,点全速运行,程序无法到达该语句
总而言之:只要我在全速运行程序再STOP后,程序肯定是停留在20MS时间检测
此时的系统寄存器值如下:

此程序是能正常运行的,只是有时调试需要STOP再设定断点进行其他内容的调试,因为这个问题导致我调试很困难,所以请大家帮帮我!我这个项目做得太久了
沙发
warm_ice| | 2008-7-14 16:18 | 只看该作者

这样

1.JNB       FLAG,0,$-1   建议您把$-1换成一相标号,因为JNB是宏,编译时会调用宏的内容,应该为多条,则$-1跳转位置就不对了.
2.总停在判断20MS的位置是正常的,你本来就在一直判断20MS是否置起来,即20MS左右为一个周期,绝大部分时间都会在这判断,所以正常.

使用特权

评论回复
板凳
elic|  楼主 | 2008-7-14 16:50 | 只看该作者

仍然有问题

按照您的建议,我将程序修改成:
LOOP_20MS:
          NOP
          JNB     FLAG,0,LOOP_20MS
          ANDIM     FLAG,1110B      ;清20MS到标志
调试后依然有此问题!

您说的:
2.总停在判断20MS的位置是正常的,你本来就在一直判断20MS是否置起来,即20MS左右为一个周期,绝大部分时间都会在这判断,所以正常.
---------------------------------------------------------------------
可问题是:我全速运行后,程序停留在
JNB     FLAG,0,LOOP_20MS   这条语句
我在ANDIM     FLAG,1110B该条语句处设定断点,并继续全速运行,但程序无法运行到该断点,换句话说就是无法进入T0中断了,正常情况下T0定时20MS时间到后程序是应该能到达该断点的

使用特权

评论回复
地板
warm_ice| | 2008-7-15 09:58 | 只看该作者

这样

如果怀疑T0中断未产生,可以在T0中断中设置一个断点,看是否可以进中断.
如果无法进入,建议您仔细检查一下T0的相关设置部分以及其它有动过IE,IRQ的地方,看是否有误操作造成IE,IRQ清除.

使用特权

评论回复
5
elic|  楼主 | 2008-7-15 10:26 | 只看该作者

谢谢

在T0中断设置断点也不能进入中断了
T0的中断子程序上面写了:
;T0定时中断子程序
T0_ISP:
    STA    AC_BAK        ;保护AC
    ANDIM    IRQ,1011B        ;清T0中断请求标志
    ORIM    FLAG,0001B    ;置20MS到标志
    LDI    T0L,0100B        ;重装计数初值    
    LDI    T0H,0110B    
    ORIM    IE,0101B        ;开总中断允许    
    LDA    AC_BAK        ;恢复AC    
    RTNI

使用特权

评论回复
6
elic|  楼主 | 2008-7-15 10:29 | 只看该作者

IE

应该T0是产生了中断的,IRQ寄存器值是1111,只是不能进入中断子程序
还有一点不明白为什么IE寄存器值无论上面时候都显示是0000

除了因为设定断点使程序停止,清除断点后再运行程序能正常工作外,只要是全速运行后手动STOP都会出问题

使用特权

评论回复
7
warm_ice| | 2008-7-15 10:42 | 只看该作者

是这样的

如果IRQ是1111,那说明已经产生中断请求标志了,只是IE被关闭了,导致无法响应中断.

我说的设置断点的正确方法是:先在T0中断中设置断点,然后程序复位,全速运行,看此时是否能进入T0中断.

IE看起来是零是因为中断产生后IC会硬件将IE清零.

建议你检查一下,是否有开其它中断,其它中断或主程序中是否有对IE的误操作,导致T0中断无法进入,或者是中断入口地址是否写错等情况.TO中断服务程序本身没有问题.

使用特权

评论回复
8
elic|  楼主 | 2008-7-15 10:53 | 只看该作者

OK

我说的设置断点的正确方法是:先在T0中断中设置断点,然后程序复位,全速运行,看此时是否能进入T0中断.
-----------------------------------------------------------
这样可以进入T0中断

IE看起来是零是因为中断产生后IC会硬件将IE清零
-----------------------------------------------------------
可程序运行在非中断程序段的时候,IE依然显示的是0000

建议你检查一下,是否有开其它中断,其它中断或主程序中是否有对IE的误操作,导致T0中断无法进入,或者是中断入口地址是否写错等情况.TO中断服务程序本身没有问题
-----------------------------------------------------------
除了T0中断,程序还使用了端口中断,应该没有进行误操作,因为如果有误操作,程序全速运行就会不正常了,可这个程序只有在STOP后全速运行才不正常

使用特权

评论回复
9
warm_ice| | 2008-7-15 11:21 | 只看该作者

这样啊

这样的话,那程序就没什么问题了,您的意思只是全速后停掉,再继续运行有问题是吧??
IE为零,您是通过寄存器窗口观察的,这些数据在全速运行时是不更新的,另外,单步运行时,中断只是不响应,但还是会产生,此时IE会被硬件清零,所以,你基本上看到IE都会是零.

STOP的部分,一般会在STOP前再设置一下IE的值,然后是一条NOP,就进入STOP,如下:
LDI IE,XXXX;
NOP
STOP
NOP
NOP
....
大概是以上的结构.
如果您全速运行后又停下来,因中断还是在运行,等再运行的时候可能会有问题,建议仿真时暂时屏蔽掉STOP,待仿真完成后再打开.

使用特权

评论回复
10
elic|  楼主 | 2008-7-15 11:34 | 只看该作者

情况这样的

这样的话,那程序就没什么问题了,您的意思只是全速后停掉,再继续运行有问题是吧??
-----------------------------------
是的,只是有这个问题,进行其他调试很不方便


IE为零,您是通过寄存器窗口观察的,这些数据在全速运行时是不更新的,另外,单步运行时,中断只是不响应,但还是会产生,此时IE会被硬件清零,所以,你基本上看到IE都会是零
-----------------------------------
我在非中断程序段设置一个断点,当程序复位全速运行到该断点时,IE也是显示0000,请问这现象正常吗?

我您理解有点出入,我说的STOP是值仿真时IDE66的停止运行功能,而不是指令STOP


使用特权

评论回复
11
warm_ice| | 2008-7-15 11:44 | 只看该作者

呵呵,我没理解错,只是跟您说一下STOP的用法

到达断点后程序停止,IE显示为0是正常的,因为此时中断还会产生,IC硬件会将IE清除,置IRQ标志,只是不去响应中断而已,此时您可以查看IRQ,应该不会是O.

使用特权

评论回复
12
elic|  楼主 | 2008-7-15 11:55 | 只看该作者

呵呵

第一次停掉IRQ值为1011,在中断程序段设个断点全速运行当无法到达该断点,然后手工停掉后,IRQ值为1111

晕了,那这样我们在系统寄存器窗口看到的IE值永远都是0000了

使用特权

评论回复
13
warm_ice| | 2008-7-15 11:57 | 只看该作者

基本上都会是0,呵呵.

基本上都会是0,呵呵.

使用特权

评论回复
14
fpga-123| | 2009-2-25 11:14 | 只看该作者

要好好查查代码……

使用特权

评论回复
15
小cat| | 2009-3-7 13:47 | 只看该作者

问题解决了吗?

使用特权

评论回复
16
天命风流| | 2018-5-24 16:50 | 只看该作者
问题解决了没?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

72

帖子

0

粉丝