我目前正在编程带有3.2768 MHz振荡器的PIC16F883。我需要让一些LED在正确的时间闪烁,但这在这里真的不相关。
问题是已经设置了Timer0,但是它不工作。我将在这里发布我的代码和初始化,以便您可以看到:)。顺便说一下,我在MpLap IDE编程,在普通C与高科技C编译器。
初始化:T0CS = 0x00; //Set Timer0 to Timer-Mode
GIE = 0x01; //Enable all interrupts
PSA = 0x00; //Prescaler enable
PS0 = 0x01; //Prescaler set
PS1 = 0x00; //Prescaler set
PS2 = 0x01; //Prescaler set
中断服务程序本身:
void interrupt timer()
{
T0IF = 0x00; //Reset timer
millicounter++; //Add one to the helper variable
PORTA = 0x00;
if (millicounter == 25) //Check if one second has passed.
{
millicounter = 0; //Reset helper variable
seconds++; //Add one to elapsed seconds.
}
}
问题是它看起来不像计时器正在运行。我现在已经用不同的设置模拟了该程序的不同时间,最新的是在中断运行时使引脚打开,然后在主电路中再次打开。问题是这种情况从未发生过。我想计时器坏了。为什么?
已设置全局中断使能位。但是要使定时器中断工作,还需要设置定时器中断使能位(T0IE)。
根据您的定时器寄存器值和晶体频率,"秒"变量将每秒增加256次。也就是说,如果你使用这个"秒"变量来提供闪烁延迟,你的LED点亮时间将大约为3.9毫秒。人眼无法察觉这种快速的闪烁
谢谢你的帮助,我把计时器修好了。我删除了我的整个配置并重写了计时器,现在它工作得很好。我确实有另一个问题,我已经写了一个新的帖子:)如果你想看看它。
新职位