C中的基本中断操作

时间:2014-04-22 15:43:03

标签: c microcontroller mplab

我有这个中断服务程序,其中有一个操作,我不太清楚它是如何工作的。我是C的初学者,所以任何人的帮助都会受到赞赏。

在ISR子程序中,我不确定“count ++”是如何工作的。它被比作“RESTART_COUNT”,现在我认为在一行代码中发生了两件事:“count”正在增加一次,而RESTART_COUNT正在与该增量之后进行比较。 “RESTART_COUNT”被定义为在代码的最开头的宏中等于10.

void __attribute__((interrupt, no_auto_psv)) _T3Interrupt(void)
{

int count;

    IFS0bits.T3IF = 0;          // clear Tmr3 interrupt flag

    StopMotor();
    IEC0bits.ADIE = 0;          // disable ADC interrupt
    IEC0bits.CNIE = 0;          // disable CN interrupt
    IEC0bits.T3IE = 0;          // disable Tmr3 interrupt

    T3CONbits.TON = 1;          // restart tmr3
    count = 0;

    while (1)
    {
        if (IFS0bits.T3IF)      //interrupt flag on?
        {
            IFS0bits.T3IF = 0;  // clear flag
            if (count++ >= RESTART_COUNT) 
            {
                IEC0bits.ADIE = 1;  // enable ADC interrupt
                IEC0bits.CNIE = 1;  // enable CN interrupt
                T3CONbits.TON = 0;  // stop tmr3
                IEC0bits.T3IE = 1;  // enable Tmr3 interrupt
                return;
            }
        }
    }
    return;
}

2 个答案:

答案 0 :(得分:1)

增量发生在count ++的比较之后,另一种方式是++ count

另外,我认为通常count ++ <= RESTART_COUNT会更有意义。

答案 1 :(得分:0)

count ++是一个后增量,因此首先要做的就是比较 ++ count是一个预增量,因此增量将在比较之前发生