8051 c编程,中断问题

时间:2014-02-17 21:30:45

标签: c interrupt microcontroller interrupt-handling 8051

我正在编程Intel 8051(C8051F312)微控制器。我只是想通过使用中断来制作一个闪烁的led程序。它编译,但led不闪烁。我会很感激的任何想法。谢谢!

我的代码是:

#include <C8051F310.H>
#include <stdio.h>

sbit led = P2^7;        //LED connected to D7 of Port2

void timer(void) interrupt 1        //interrupt no. 1 for Timer 0
{
    led=~led;           // toggle LED on interrupt
    TH0=0xFC;             // initial values loaded to timer
    TL0=0x66;
}

void main(void)
{
    TMOD = 0x01;          // mode1 of Timer0
    TH0 = 0xFC;         // initial values loaded to timer
    TL0 = 0x66;
    EA = 1;           // global interrupt enable
    ET0 = 1;          // enables Timer 0 interrupt
    TR0 = 1;              // start timer
    while(1);             // do nothing  
}

1 个答案:

答案 0 :(得分:2)

如上所述Mike Jablonski,您需要降低中断率。您的原始代码正在中断3.0625MHz / 12 / 922~ = 277Hz。部分CKCON添加禁用缩放到定时器(通过设置T0M),所以现在你在~3.3kHz处中断。你将无法看到它。

看到任何东西都假定你有一个功能性电路。您没有配置输出引脚。你说你的LED已经“现在”,但希望不是意味着它不是以前。这没有多大意义,因为你没有改变任何关于引脚正在做什么的事情。

  1. 摆脱CKCON行以保持/ 12缩放,并在中断时使用TH0重新加载TL00x00。这样可以让你在低于4Hz的频率下中断,更加明显。

  2. 使针推拉:

    P2MDOUT   = 0x80;
    XBR1      = 0x40;
    
  3. 开始阅读您的微观datasheet