怎样在PIC中使用定时器和看门狗定时器

电子说

1.3w人已加入

描述

在许多PIC示例中,您将看到旨在在代码执行期间添加暂停的延迟。这种延迟的一个示例包括先前文章中的LED闪烁代码,其使用简单的for循环来在LED的ON和OFF状态之间添加延迟。但是,有时这种延迟并不是很有用,特别是在需要精确定时时。

当需要精确定时时,会有非常有用的外设:定时器!与for循环延迟不同,定时器可以为定时事件提供非常准确的源并创建特定长度的延迟。通常,PIC有许多不同的定时器,所以为了简单起见,我们只关注PIC16F819中的timer0和看门狗定时器。

PIC16F819中的Timer0

大多数PIC都有一个timer0,它通常是一个可以计时的8位定时器来自多个源,用于其他外设,并可在溢出时产生中断。这使它对关键的时序例程非常有用,但也可以用作通用计时器。使用定时器时,有两种主要方法可以实现:

定时器溢出时中断PIC(计数超过255并重置为0)

探测定时器寄存器并查看它当前处于什么值?

由于我们尚未考虑中断,我们将专注于使用定时器进行1ms的简单延迟通过民意调查。使用定时器时的第一个任务是配置,这是通过配置与定时器相关的寄存器来完成的。对于PIC16F819,OPTION_REG保存配置定时器所需的位。

需要设置的第一位是定时器的时钟源。最常见的来源是内部指令时钟周期(基本上是工作频率/4),但您也可以从外部时钟源(馈入T0CKI引脚)为定时器提供时钟。在我们的例子中,我们将从PIC而不是外部源为它提供时钟。

可以设置的下一位是时钟边沿,它确定定时器是在上升沿还是下降沿递增;这很少使用,因此现在可以忽略。

下一位PSA确定预定标器是分配给定时器还是分配给看门狗。在这个例子中,我们将把PSA分配给看门狗,原因将在后面解释。

定时器

在XC8中的PIC16F819上设置timer0

配置定时器后,可以在某些代码中使用它来延迟1ms。定时器由FOSC/4提供时钟,我们的FOSC为500kHz,因此定时器将以125kHz(或每8us一次)的速率递增。由于我们希望使用此定时器延迟1ms,我们需要确定定时器计时的时间,直到它达到大约1ms的值。这是一些数学的来源!

定时器

因此,当1ms过去时,定时器的值为125。所以在我们的延迟功能中,我们复位定时器值,然后等到定时器寄存器等于或大于125。

PIC16F819中的看门狗定时器

看门狗定时器可以是真正的源痛苦,也可以使PIC系统非常强大和可靠。但看门狗计时器究竟是什么?简单地说,看门狗定时器是PIC中的硬件定时器,如果不经常由软件复位,将导致PIC复位。如果PIC由于硬件或软件问题而挂起并保证PIC将从头重新启动,则此功能非常有用。它不仅重置了系统,还标记了一些可用于确定系统是否崩溃的位。

在使用看门狗之前,必须先启用它,这可以通过在代码顶部设置一个配置位来完成。如果您没有使用PIC16F819,请检查数据表中使用的配置位,使用MPLAB X中的配置位选择系统,或使用Google。

定时器

打开PIC16F819上的看门狗定时器

下一步是检查看门狗是否与预缩放器一起使用;这是之前OPTION_REG发挥作用的地方。由于我们不希望预定标器与timer0一起使用,我们将PSA分配位设置为0,这意味着预分频器被分配给看门狗。但这如何影响看门狗的运作?从本质上讲,预分频器可以被认为是一个时钟分频器,所以如果你有一个1MHz的时钟进入具有2倍预分频器的看门狗,进入看门狗的时钟实际上是500kHz(因为它除以2 )。

看门狗从内部31.25kHz振荡器获取其时钟源,具有16ms周期,然后将该16ms脉冲馈入预定标器系统。这意味着看门狗可以在8种不同选项中的一种上超时(使用PS2:PS0位分配)。

000 - 16ms

001 - 32ms

010 - 64ms

011 - 128ms

100 - 256ms

101 - 512ms

110 - 1024ms

111 - 2048ms

对于我们的项目,我们将配置看门狗定时器,因此如果项目挂起超过一秒钟,系统将重置。

定时器

设置已分配给看门狗的预缩放器

所以现在我们有一个看门狗,它会在挂起时每秒重置一次PIC,但我们如何确定挂?这是一个有用的函数:CLRWDT()。调用此函数后,它将自动重置看门狗定时器。此函数应放在主循环代码段中,以便PIC不复位,主代码需要经常迭代一次。

定时器

重置看门狗定时器所需的功能

计时器:必要的外围设备

定时器可以是很棒的外设,你应该尽快利用它们。它们可以提供准确的计时,计数甚至无挂起的系统。 PIC有时还有其他具有许多高级功能的定时器,例如16位和门控,可用于控制其他外设。总的来说,不要犹豫使用计时器!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分