我目前正致力于使用3.2768 MHz振荡器编程PIC16F883。我需要在正确的时间点一些LED闪烁,但这在这里真的没什么关系。
问题是设置了Timer0,但它无法正常工作。我将在这里发布我的代码和初始化,以便你可以看到:)。顺便说一下,我在MpLap IDE中进行编程,使用Hi-Tech 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.
}
}
问题是它看起来不像计时器正在运行。我现在已经使用不同的设置模拟了程序,最新的是在中断运行时使引脚打开,然后在主中再次打开。问题是它永远不会发生。我认为计时器没有运行。为什么呢?
答案 0 :(得分:3)
您已设置全局中断使能位。但是要使定时器中断起作用,还需要设置定时器中断使能位(T0IE)。
根据您的定时器寄存器值和晶振频率,"秒"变量将每秒递增256次。即,如果你正在使用这个"秒"变量提供闪烁延迟,您的LED开启时间约为3.9毫秒。人眼无法检测到这种快速闪烁。
答案 1 :(得分:0)
谢谢你的帮助,我让计时器正常工作。我删除了我的整个配置并重新计算了计时器,现在它工作正常。我确实有另一个问题,我已经写了一篇新文章:)如果你愿意,请查看。