PIC16F883定时器无效

时间:2015-09-04 11:50:35

标签: c timer embedded pic mnemonics

我目前正致力于使用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.
    }
}

问题是它看起来不像计时器正在运行。我现在已经使用不同的设置模拟了程序,最新的是在中断运行时使引脚打开,然后在主中再次打开。问题是它永远不会发生。我认为计时器没有运行。为什么呢?

2 个答案:

答案 0 :(得分:3)

您已设置全局中断使能位。但是要使定时器中断起作用,还需要设置定时器中断使能位(T0IE)。

根据您的定时器寄存器值和晶振频率,"秒"变量将每秒递增256次。即,如果你正在使用这个"秒"变量提供闪烁延迟,您的LED开启时间约为3.9毫秒。人眼无法检测到这种快速闪烁。

答案 1 :(得分:0)

谢谢你的帮助,我让计时器正常工作。我删除了我的整个配置并重新计算了计时器,现在它工作正常。我确实有另一个问题,我已经写了一篇新文章:)如果你愿意,请查看。

New Post