从定时器中断开始到进入中断、之间竟消耗了17us

2020-02-09 11:24发布

定时器初始化
void init_TMR0()
{
    T0CS=0; //Fosc/4
    TMR0=0;

    GIE=1;
    T0IE=1;
    T0IF=0;
}
中断
void interrupt ISR()
{
    if(T0IF)
    {
        PWM0=!PWM0;
        T0IF=0;
    }
}
主函数里面什么都没做,while(1) ;

在仿真的时候发现、从定时器中断开始到进入中断、之间竟消耗了17us:

(原文件名:进入中断.jpg)


(原文件名:进入中断时TMR0已经跑了17us.jpg)

在这17us的时间内、程序都去做什么了呢?

使用TMR1时、情况也一样
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
reloaded
1楼-- · 2020-02-10 15:02
回复【6楼】slash1986  
回复【5楼】millwood0
-----------------------------------------------------------------------
millwood0是外国友人吗
-----------------------------------------------------------------------

错,milwood只不过没有装中文输入法而已,,,
slash1986
2楼-- · 2020-02-10 19:54
 精彩回答 2  元偷偷看……
cc3000c
3楼-- · 2020-02-10 22:09
回复【5楼】millwood0
-----------------------------------------------------------------------

thanks for your help.
cc3000c
4楼-- · 2020-02-11 00:01
millwood0 的回复 咋一看去倒像是datasheet的说明,一开始我就是这样的感觉,呵呵.....
............
........................
millwood0 说明了堆栈保护耗时可达14 - 16 us,我又看了下、恢复现场时也要这么多时间__14us 。

本来想用定时器得到几个us的延时、看来这样简单的方法不行了。
也许同时用多个定时器可以...
cc3000c
5楼-- · 2020-02-11 03:05
回复【3楼】headwolf_83
-----------------------------------------------------------------------

0x04是中断入口、应该没有现场保护的代码吧。

反汇编窗口里面是从0x10地址处开始的,没有0x04地址。
headwolf_83
6楼-- · 2020-02-11 04:35
VIEW——PROGRAM MEMORY,这么看好了。PIC16F,是不能一进去就GOTO的,所以04H地址开始,就必须是中断保护。

一周热门 更多>