【发布时间】:2014-02-17 21:30:44
【问题描述】:
我正在编写一个 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
}
【问题讨论】:
-
首先尝试在程序的主循环中切换 LED。那是正确的端口引脚吗?它是输出吗?电路是否正常?是否启用中断?定时器是否启用?中断是否会触发? LED 是否真的闪烁,但太快而无法看到?观察到的故障模式是什么 - 常亮或常灭?
-
现在我添加了“CKCON=6;”这一行,现在它已经稳定了
-
为了进行测试,您可能希望减少定时器中断服务例程 (ISR) 的触发频率,例如每 500 毫秒,这样 LED 的切换就很容易看到。
-
2 可能 1) 可能在 ISR 中重新启用
ET0 = 1;。 2)也许交换加载顺序TH0 , TL0。 -
是的,我想少做一次,但我不知道怎么做! @MikeJablonski
标签: c interrupt microcontroller interrupt-handling 8051