【发布时间】:2013-02-12 06:14:56
【问题描述】:
您好,我正在尝试在 8051 的定时器 3 上设置溢出定时器中断。代码卡在中断例程中。我正在使用 2511F32(wixel)
这里是中断设置代码:
{ ......
T3CTL |= 0xE0; // set prescaler to tick frequency / 128 (DIV) bits 7:5
T3CTL |= 0x04; // Clear counter value (CLR - bit 2)
T3CTL |= 0x00; // Timer mode set to free running (00) bits 1:0
T3CTL |= 0x08; // Enable overflow interrupt (OVFIM) bit 3
T3CCTL1 &= ~0x40; // disable timer compare interrupts
T3CCTL0 &= ~0x40; // disable timer compare interrupts
IEN1 |= 0x08; // Enable Timer 2 interrupts
T3CTL |= 0x10; // Start the timer (START - bit 4)
EN = 1;
......
}
这是中断程序代码
ISR(T3,0)
{
TIMIF &= ~0x07; // T3OVFIF Clear T3 overflow interrupt flag - bit 0
LED_YELLOW_TOGGLE();
}
它仍然被困在 ISR 例程中。没有其他要清除的中断标志。有什么想法吗?
【问题讨论】:
-
LED_YELLOW_TOGGLE() 是做什么的?您也可以发布代码吗?
-
@MartinThompson 这只是一个 I/O 引脚切换:#define LED_YELLOW_TOGGLE() {P2DIR ^= 0x04;}
-
@UncleO - 那是清除 CPU 中断标志,规范说它是由硬件自动清除的,只是为了测试我还添加了该行,相同的行为。我有 timer1 也是 16 位的 workni,并且有不同的中断标志,没有问题
标签: embedded 8051 interrupt sdcc