【问题标题】:timer & overflow interrupt MikroC code定时器和溢出中断 MikroC 代码
【发布时间】:2013-08-02 14:18:30
【问题描述】:
void TimerFunction()
{
TIMSK=(1<<TOIE0);
TCNT0=0x00;
TCCR0 |= (0<<CS02) | (1<<CS00) | (0<<CS01);
}

//##############################################################################
ISR(TIMER0_OVF_vect)
{
    // process the timer0 overflow here
  countClock ++;
  count++;
  delay++;
//some extra code 
}

然后

void main()
{
 //someCode
 TimerFunction();
}

但它对我不起作用,那是启动定时器 0 及其中断服务程序的正确方法吗?

【问题讨论】:

    标签: avr atmega mikroc


    【解决方案1】:

    乍一看我会说你想念

    sei();  // set global interrupt flag
    

    如果这不在//someCode 范围内...无论如何我建议仅在初始化所有特定中断源(定时器、USART 等)后打开全局中断启用标志

    【讨论】:

    • 未声明的标识符“sei”表达式
    • sei() 通常在&lt;avr/interrupt.h&gt; 中定义...你有#include d 那吗?
    • 我将 Mikro C 用于 avr 编译器,因为我知道其中没有 #include
    • 然后尝试使用SREG_I = 1;
    • 也许 SREG_I 是该位在 SREG 中的位置...抱歉,我不熟悉 MikroC - 使用 AVR Studio ...无论如何 - 您需要设置全局中断启用位,即位7 AVR状态寄存器
    【解决方案2】:

    是的,在您的代码中未设置全局中断标志。如果针对 MikeD 的解决方案不起作用,请尝试以下操作:

    asm{sei};
    

    【讨论】:

      【解决方案3】:

      使用 SREG.SREG_I = 1;启用全局中断

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 2018-04-04
        • 1970-01-01
        • 2021-02-24
        • 1970-01-01
        相关资源
        最近更新 更多