【问题标题】:PIC16F883 timer won't workPIC16F883 定时器不工作
【发布时间】:2015-09-04 11:50:35
【问题描述】:

我目前正在使用 3.2768 MHz 振荡器对 PIC16F883 进行编程。我需要在正确的时间让LED 闪烁,但这在这里真的不相关。

问题是已经设置了 Timer0,但它不起作用。我将在这里发布我的代码和初始化,以便您查看:)。顺便说一句,我在 MpLap IDE 中使用 Hi-Tech 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 = 1;
  • 我找到了THIS很好的教程
  • 在正确的时间让 LED 闪烁真的相关的。构建代码时 - 这是您的第一个参考点。在这种情况下,让定时器中断闪烁它。如果看得太快,请使用计数器掩码或从慢速计时器开始。

标签: c timer embedded pic mnemonics


【解决方案1】:

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

根据您的定时器寄存器值和晶体频率,“秒”变量将每秒增加 256 次。即,如果您使用此“秒”变量来提供闪烁延迟,您的 LED 开启时间约为 3.9 毫秒。人眼无法检测到这种快速眨眼。

【讨论】:

  • 不幸的是我已经尝试过了,但仍然没有任何效果,还有其他想法吗?
  • 看来你的定时器配置是正确的。您可以尝试使用 picsimulatorIDE 或 Proteus 等模拟器,以确保配置值正确写入相应的寄存器。还要确保您的配置位设置正确。在不需要的时候忘记禁用看门狗定时器给我带来了很多麻烦。
【解决方案2】:

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

New Post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2023-03-19
    • 2011-10-18
    • 2013-03-27
    • 2023-03-18
    • 2016-01-09
    • 2016-01-08
    相关资源
    最近更新 更多