【问题标题】:Setting Timer interrupt in 8051, getting stuck在8051中设置定时器中断,卡住
【发布时间】: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


【解决方案1】:

你怎么说代码卡在ISR中?如果 LED 正在切换,则一直启用中断,并且在完成后立即调用 isr。它永远不会返回到主代码..

【讨论】:

  • 您好,我发现了问题。 MCU有一个引导加载程序,它是通过读取黄色LED引脚P2_2,所以它进入了引导加载程序模式。它现在正在工作。谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2020-08-04
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多