Embedded 定时器不在PIC18F睡眠模式下工作?

Embedded 定时器不在PIC18F睡眠模式下工作?,embedded,microcontroller,pic,microchip,pic18,Embedded,Microcontroller,Pic,Microchip,Pic18,我有带MPLAB C18的PIC18F87J11。我试图通过强迫设备进入睡眠状态来限制设备的电池消耗。我注意到在进入睡眠模式时,计时器0停止计数,直到醒来。另外,我知道的唯一唤醒设备的方法是当它从另一个节点接收到消息时,因为我有一个MRF89XA收发器 要使我的设备进入睡眠状态,我只需调用编译器头文件中定义的这个函数 Sleep(); 问题1:除了从某个节点接收消息外,如何唤醒设备? 在数据表中,它表示通过中断退出或通过重置退出,但如果没有计时器,您如何做到这一点 通过阅读its声明,必须使

我有带MPLAB C18的PIC18F87J11。我试图通过强迫设备进入睡眠状态来限制设备的电池消耗。我注意到在进入睡眠模式时,计时器0停止计数,直到醒来。另外,我知道的唯一唤醒设备的方法是当它从另一个节点接收到消息时,因为我有一个MRF89XA收发器

要使我的设备进入睡眠状态,我只需调用编译器头文件中定义的这个函数

Sleep(); 
问题1:除了从某个节点接收消息外,如何唤醒设备? 在数据表中,它表示通过中断退出或通过重置退出,但如果没有计时器,您如何做到这一点

通过阅读its声明,必须使用计时器1才能监控时间,真的是这样吗

我真正想做的就是尽可能降低电池的使用量,并让计时器在睡眠模式下工作


谢谢

是的,定时器1是唯一可以在睡眠模式下工作的定时器。从数据表:

从任何其他模式进入睡眠模式都不会 需要一个时钟开关。这是因为没有时钟是固定的 一旦控制器进入睡眠状态,则需要。如果 如果选择WDT,INTRC源将继续 操作。如果定时器1振荡器启用,它也将 继续运行

要以最低功耗运行计时器,请使用睡眠模式和计时器1

如果您希望在电源管理模式下使用其他外设,如Timer0,则有一种替代睡眠模式的方法,称为空闲模式:

当执行
睡眠
指令时,如果IDLEN位设置为
'1'
执行时,外围设备将从时钟开始计时 使用SCS位选择的源;但是, CPU将不会计时。时钟源状态位为 不受影响。设置IDLEN并执行睡眠 指令提供了一种从 将给定的运行模式转换为相应的空闲模式

要将IDLEN位设置为1,请添加
OSCCON |=0b10000000在发出
Sleep()之前的某个地方


显然,空闲模式会比睡眠模式消耗更多的电能,因为外围设备一直在运行。

我确实遇到了这个问题,但这只是我的一个小疏忽。Timer1可以有一个同步位,称为:

T1CONbits.nT1SYNC=1;//定时器1外部时钟输入同步控制位

这将使计时器1与主时钟同步。由于主时钟不在睡眠模式下运行,它无法同步,因此计时器1不工作。我所需要做的就是确保我没有将计时器1与主时钟同步。将其配置为正确的睡眠模式,即不深度睡眠、空闲或vBAT,一切正常


我使用MPLABx和XC8与PIC18F97j94

您回答了我的问题,我需要定时器1,但我不完全理解您的答案。比如计时器0和计时器1之间有什么区别?哪个更准确?另外,如何将IDLEN设置为“1”?比如代码中的确切位置?这些小事情真的让我困惑,这不是你的错,我对配置引脚没有很强的理解。如果你能再解释一点,那就太好了。谢谢您的设备有五个计时器模块。定时器0和定时器1都能够达到16位精度。定时器0可配置为在8位或16位模式下运行。定时器1是一个16位定时器。研究数据表以了解其他差异。我的计时器0在没有睡眠模式的情况下工作正常,如果我要实现计时器1,代码中要更改的主要内容是什么?要尝试空闲模式,请尝试添加line
OSCCONbits.IDLEN=1睡眠()之前的某个地方。我会这样做,我会把我的新问题(如果有的话)发布到一个新的线程上。谢谢你的帮助!