一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

使用高速微控制器的电源管理提供电池支持的系统要求和程序示例

来源:analog 发布时间:2023-11-13

摘要: 学习DS87C520和DS87C530高速微控制器的电源管理功能,并提供电池支持的系统要求和程序示例。

本应用笔记讨论了采用微控制器的电池供电系统的功耗。大多数Maxim高速微控制器,包括DS87C520, DS89C450, DS80C400和DS5250采用各种电源管理方法。本应用说明探讨了电源管理方法,如停止模式,空闲模式,最佳时钟频率和外部外设,仅举几例。示例代码包括突出的新功能,专门设计到这些微控制器,以尽量减少功耗。

概述

电源管理在电池供电的应用中是至关重要的。微安的差异可以转化为数月或数年的使用寿命,这可以在市场上成功或失败的产品。Maxim微控制器的高集成度使其成为需要低功耗的便携式或电池供电应用的理想选择。通过将处理器和外设组合到一个芯片上,消除了冗余的硬件,并实现了节能。此外,高速微控制器系列中设计的电源管理功能进一步降低了功耗。

微控制器功耗中最大的一个因素是时钟频率。微处理器所消耗的功率与其运行速度成正比,因此,在尽可能低的频率下运行的设备将产生最大的功耗节省。选择的速度取决于系统需求,最明显的是中断服务时间。温度也会影响功耗。半导体器件在较低的温度下消耗更大的功率。如果正在开发的系统是为低温设计的,设计人员应该期望高于典型的功耗值。系统设计对功耗也有直接影响,驱动大的外部负载会增加功耗。

本应用说明涵盖了高速微控制器家族的大多数成员。介绍了它们的电源管理特性,并介绍了最小化功耗的技术。由于电源管理功能与许多外设功能,特别是中断和串行功能一起工作,因此在开始本节之前,敦促用户熟悉处理器的整体操作。本应用说明附带的软件示例可以下载。

所有新的电源管理功能都可以在不牺牲吞吐量或对外部事件响应的情况下降低功耗。这个家族的成员可能包含以下列出的一个或多个特征:


动态时钟速度控制


高速微控制器支持四种时钟管理模式:Stop、PMM1(电源管理模式1)、PMM2(电源管理模式2)和Idle。它们可以在这些模式之间动态切换,允许用户优化设备的速度,同时最大限度地减少功耗。停止模式在标准8051功能的基础上进行了改进,现在支持从外部中断和重置源恢复。


蜿蜒而行


该设备包含自动“切换回”功能,允许在电源管理模式(PMM)下工作的设备在接收到外部中断或串行端口传输时切换到“高速”。这使得处于省电模式的设备能够快速响应外部事件和/或操作其串行端口。没有切换功能的基于8051的传统设备在没有高速运行和高功耗的情况下,会迅速失去服务中断的能力。


可选时钟源


晶体振荡器在任何微控制器上都是一个大的功耗消耗者,特别是在低功耗运行时。环形振荡器用于从停止模式快速启动,也可用于在正常操作期间提供约3至4MHz时钟源。虽然在上电时仍然需要晶体振荡器,但一旦晶体稳定,设备操作可以切换到环形振荡器,实现多达25 mA的功耗节约。


禁带参考禁用


该选项可用于禁用带隙参考,该带隙参考用于在停止模式下检测电源故障。停止模式电流可以极大地利用这一特性。


增强的状态报告


虽然动态切换内部时钟速度的能力是一个好处,但如果在错误的时间执行,它可能会严重干扰与时间相关的功能的操作。状态寄存器(Status;C5h)包含有关串行端口、晶体振荡器、高优先级、低优先级和断电中断的状态信息。软件可以根据这个寄存器中的信息延迟或取消计划的速度变化。

时钟速度控制

描述


微控制器的工作频率是决定功耗的最大因素。高速微控制器家族的微控制器支持四种时钟速度管理模式,通过减慢或停止内部时钟来节省电力。这些模式允许系统设计人员在对性能影响最小的情况下最大限度地节省电力。


PMM1


电源管理模式1 (Power Management Mode 1, PMM1)允许用户以较低的速度运行,以节省电力。设置时钟分频率位(PMR.7-6)将强制部件从默认的每个机器周期4个时钟(除以4)到每个机器周期64个时钟(除以64)。外部晶体继续全速运转。所有外设和指令都将以这种降低的速度运行。通过设置适当的时钟分频器速率位或利用切换功能,微控制器可以恢复除以4操作。


PMM2


电源管理模式2 (PMM2)允许用户以更慢的速度运行,以提高省电能力。设置时钟分频率位(PMR.7-6)将强制部件从默认的每个机器周期4个时钟(除以4)到每个机器周期1024个时钟(除以1024)。外部晶体继续全速运转。所有外设和指令都将以这种降低的速度运行。微控制器可以通过设置适当的时钟分频器速率位或利用切换功能恢复全速(除以4)操作。这种模式可以比PMM1更省电。


停止模式


停止模式是可用的最低功率状态。它通过设置停止位(PCON.1)来启动。而在这种模式下,晶体振荡器停止,所有内部时钟,包括看门狗定时器,停止。实时时钟不受停止模式的影响。停止模式由外部中断、实时时钟中断、通过RST引脚的外部复位或上电复位退出。每次中断都会导致设备转到相应的中断例程以恢复执行。

微控制器包含一个环形振荡器,允许从停止模式快速恢复。这为设备启动操作提供了一个即时可用的4MHz时钟源。它可以发挥作用,直到晶体稳定或可以继续用作时钟源。环形振荡器不表现出与外部时钟一样多的稳定性,并且该设备不应执行需要高精度或串行端口数据传输的定时测量,同时从环形振荡器操作。有关环形振荡器使用的更多信息,请参阅本文档的时钟源控制部分。


空闲模式


空闲模式停止微控制器处理器核心的操作,但保留内部时钟,串行端口和计时器运行。该模式通过设置IDL位(PCON.0)来调用,并且可以通过RST引脚中断或外部复位来退出。不建议在新设计中使用这种模式,因为通过将零件置于PMM2中并执行nop可以实现低功耗操作。它的包含提供了向后的软件兼容性。

电源管理模式

最大的省电来自于利用电源管理模式。与其他技术不同,电源管理模式1和2 (PMM1和PMM2)允许用户在不牺牲性能的情况下降低功耗。虽然电源管理功能是节能设计的重要组成部分,但对微处理器的透彻理解将使系统设计者能够实现最大的节能。

时钟速度管理模式被设计为基于外部活动和性能需求的逐步降低功耗的一部分。PMM1和PMM2提供最低水平的功耗,同时仍然允许完整的计算和外围操作。图1展示了时钟管理模式的发展过程。正如后面所解释的,PMM1和PMM2之间的转换必须通过除以4模式进行。


图1所示 时钟速度模式的进展。


进入和退出电源管理模式


软件使用电源管理寄存器(PMR)中的位调用所需的电源管理模式。通过设置停止位(PCON.1)来调用停止模式。器件速度由时钟分频器速率位CD1、CD0 (PMR.7-6)选择,如下图所示。

表1 时钟除数速率位设置
CD1CD0机器周期率
00保留
014个时钟(默认)
1064个时钟(PMM1)
111024时钟(PMM2)

PMM1和PMM2可以通过配置时钟分频率位CD1、CD0或切换功能退出。进入或退出PMM只能通过除以4模式。例如,要从PMM1(除以64)模式切换到PMM2(除以1024)模式,必须首先从PMM1切换到除以4模式,然后从除以4切换到PMM2模式。试图执行非法的速度更改将被忽略,并且比特将保持不变。软件负责使用状态寄存器(Status;C5h),然后再尝试变速。在异步串行端口操作期间改变速度将破坏串行传输。

当PMM被调用时,外部晶体将继续全速运行,微控制器仍将在每个机器周期执行四个内部状态。在PMM中,设备执行外部时钟的内部划分,PMM1为16 (16 × 4 = 64), PMM2为256 (256 × 4 = 1024),以达到所需的频率,而不是实际执行每个指令64或256个内部状态。例如,在C2期间发生的操作仍然会这样做。大多数应用程序不会发现有必要关注这么多细节,但是提供了用于计算关键时间的信息。


图2 PMM1中的内部计时关系。

注意,更改时钟除数,无论是手动还是通过切换,都不会影响定时访问过程。定时存取操作与机器内部周期有关,而不是绝对的时间参考。


定时器和PMM


计时器0、1和2将默认上电到每个计时器刻度12个外部时钟,以保持与原始8051/8032规格的兼容。定时器可以单独配置,当设备在除4模式下运行时,通过在时钟控制寄存器(CKCON;8Eh)中设置相关位,以每个计时器滴答的速率运行。在PMM期间,计时器0、1和2以相应降低的时钟速率运行,因为计时器从内部时钟获得它们的基准时间。这也会影响PMM中串口的操作

表2 时钟模式对定时器操作的影响
CD1CD0OSC。每台机器循环次数每个计时器0/1/2时钟的Osc周期Osc周期每定时器2时钟,波特率gen。每个串口时钟模式的Osc周期为0OSC。每个串口时钟模式的周期数
TxM = 1TxM = 0T2M = 1T2M = 0SM2 = 0SM2 = 1SMOD = 0SMOD = 1
00保留







014124221246432
1064 (PMM1)192643232192641024512
111024 (PMM2)307210245125123072102416384年8192

看门狗定时器运行的时间与内部时钟相同;也就是说,如果设备处于PMM1,看门狗也将以除以64的模式运行。这使看门狗定时器在PMM和除以4模式之间切换时与处理器的操作同步。如果使用PMM,使用看门狗计时器作为附加计时器的应用程序应该考虑到这一点。

实时时钟与PMM设置无关。它使用外部32 kHz晶体作为参考,并且可以在任何模式下访问。


手动退出PMM


除了切换功能之外,还可以通过配置时钟分频器速率位来手动退出PMM。进入或退出PMM只能通过除以4模式,并且尝试执行非法的速度更改将被忽略,并且比特将保持不变。如果与时间相关的操作可能正在进行中,则应该询问状态寄存器(Status;C5h),以确定在切换出PMM或切换到PMM之前该操作是否已经完成。


重置PMM中的灵敏度


而在PMM中,用于检测外部复位脉冲的方法不同于除4模式中使用的方法。在除4模式下,(和标准8051架构)复位必须为两个机器周期高检测。如果在PMM中是这样,则必须在至少128或2048个时钟周期内断言重置。为了避免这种情况,在PMM中工作的设备采用正边缘检测传感器,而不是一个机器周期检测复位信号。这意味着使用PMM的设备更容易受到噪声的影响,必须额外注意保持复位信号无噪声。

起伏不平的特性

切换功能允许用户在事件发生时快速恢复微控制器到更高的速度。使能后,合格的事件将使设备自动从除64 (PMM1)或除1024 (PMM2)切换到除4操作,无需软件干预。这允许设备以最小的延迟响应高优先级或中断驱动的事件。以下来源可以触发切换:

  • 外部中断0/1/2/3/4/5

  • 检测到串行起始位,串口0/1

  • 传输缓冲区加载,串口0/1

  • 看门狗定时器复位

  • 接通电源的重置

  • 外部复位


由于PMM、回切、外部中断、计时器/计数器和串行端口之间的密切关系,强烈建议系统设计人员在尝试使用回切功能之前熟悉这些功能。


状态寄存器


添加了一个状态寄存器(Status;C5h)来帮助软件确定速度变化是否合适。状态寄存器提供关于串行端口、高优先级、低优先级和电源故障中断的状态信息,允许设备确定是否应该切换到PMM。

当使用切换功能退出或进入PMM时,状态寄存器的好处就变得显而易见了。在PMM中执行中断服务例程的设备不会执行回切以响应同等或更低优先级的中断。状态寄存器可以用来测试正在进行的中断服务程序,并且可以推迟进入PMM,直到完成,或者采取另一种行动。


启用/启动蜿蜒而行


自动回切通过设置SWB位(PMR.5)来实现。当合格的切换事件发生时,设备将退出任一PMM并返回到每个机器周期4个时钟的默认操作模式。清除SWB位将禁用外部中断和串行端口导致未来切换的能力,但不会影响当前速度。外部中断要引起回切必须满足五个条件:

  1. 设备当前必须处于PMM1或PMM2状态。

  2. SWB位(PMR.5)必须设置。

  3. 全局中断必须通过设置EA位(IE.7)来启用。

  4. 必须启用特定的中断。

  5. 特定的中断发生并得到确认。


通过串行端口切换略有不同。一般来说,切换是由中断引起的。在串行端口的情况下,这引入了一个问题,因为它们只在接收或传输完整的单词时产生中断。为了使串行端口以标准波特率正确地接收或发送字,它必须以全速运行。如果微控制器在PMM中工作,它将永远不会完成接收以启动中断或相应的切换。

微控制器通过在接收到RX引脚上的下降沿而不是接收器中断时启动开关(如果启用)来解决这个问题。这切换设备回到全速在下一个内部机器周期及时捕捉开始位和其余的传输。请注意,串行端口启动切换回的能力不依赖于启用串行端口中断位(IE.4或IE.6),仅依赖于特定的接收器启用位(SCON0.4或SCON1.4)。串行端口接收导致回切必须满足四个条件:

  1. 设备当前必须处于PMM1或PMM2状态。

  2. SWB位(PMR.5)必须设置。

  3. 特定的串口必须通过设置特定的接收器使能位(SCON0.4或SCON0.4)来使能

  4. SCON1.4)。

  5. 在特定的RX引脚上检测到下降沿。


切换功能也与传输功能一起工作。如果满足适当的条件,在加载串口缓冲区(SBUF0;99h或SBUF1;C1h)时,工作在PMM中的设备将自动返回到除4模式。这消除了用户在启动传输之前手动将速度设置为除以4的需要。发射机中断可以用来在传输完成时发出信号,以便软件可以将设备返回到适当的PMM。要使串口传输发生回切,必须满足三个条件:

  1. 设备当前必须处于PMM1或PMM2状态。

  2. SWB位(PMR.5)必须设置。

  3. 串行端口传输必须通过插入特定的串行端口缓冲区(SBUF0;99h或SBUF1;C1h)来启动。


虽然在PMM中串行端口发送和接收功能都是可能的,但在这些模式下,不可能将波特率发生器配置为任何标准速率(300,1200,2400等),从而无法与标准外设进行通信。如果要在设计中使用串行端口活动和PMM,强烈建议使用切换功能。

使用Switchback时的注意事项

起伏不平的时机


当使用切换过程时,主要考虑因素之一是将设备从PMM返回到全速所需的时间。这是计算与中断服务相关的延迟的一个因素。切换将在启动切换事件之后的第一条指令的C1周期发生。如果当前正在执行的指令是对IE、IP、EIP或EIE寄存器的写入,则中断处理将延迟到下一条指令完成。图3演示了在两个周期指令期间中断和切换之间的时序关系。


图3 中断驱动蜿蜒而行。

注:


  1. 内部时钟周期PMM1为16个外部时钟周期,PMM2为256个外部时钟周期。

  2. 中断的极性随外部中断数而变化。

  3. 示例显示双周期指令。中断和回切的执行将发生在中断被确认的指令的最后一个机器周期结束时。


上述时序关系的一个例外是,在启用的串行端口接收器上接收到下降沿后,串行端口切换将立即发生。切换将在下降沿之后的下一个内部时钟周期开始时发生。图4展示了串口活动和回切之间的时序关系。


图4 串行端口驱动的切换。

注:


  1. 内部Cx周期是PMM1的16个外部时钟周期,PMM2的256个外部时钟周期。

  2. SPRA0和SPRA1将在下降沿RX的1个机器周期内发生变化。

  3. 示例显示单周期指令。中断和回切的执行将发生在中断被确认的指令的最后一个机器周期结束时。


中断优先级


因为切换特性使用中断来限定执行,所以它受到中断优先级的影响。外部中断在中断服务程序开始时启动一个切换。如果更高优先级的中断正在进行中,相关的回切将保持挂起状态。不可能启用或禁用单个中断源的切换功能,除非启用或禁用特定中断。

下面的例子将说明如果不考虑中断源的优先级,问题是如何发生的。假设用户在使用PMM的设计中同时使用定时器0和外部中断1。当在PMM中运行时,发生定时器0中断,设备开始执行中断服务程序(ISR)。在Timer 0 ISR期间,外部中断1发生,表示需要快速服务的外部事件。因为两个中断具有相同的优先级,所以外部中断1将保持挂起,直到计时器0 ISR完成。尽管这种中断优先级在任何设计中都是正常的考虑因素,但PMM中降低的操作速度将进一步增加与服务外部中断1相关的延迟。这可以通过将外部中断1指定为高优先级中断而将定时器0指定为低优先级中断来避免。

串行端口发起的切换不利用中断结构,因此不受中断优先级的影响。串行端口启动的切换通过特定的接收器启用位(SCON0.4或SCON1.4)启用或禁用。串行端口启动回切的能力不依赖于启用串行端口中断位(IE.4或IE.6)。


串口活动和PMM


由于PMM的功能是改变微控制器的内部时钟频率,因此可能会影响与时间相关的外设,如串行端口。当切换到PMM时,用户必须确保串行端口没有接收或发送。要做到这一点,最简单的方法是询问状态寄存器(Status .3-0)中的串口活动位。

在接收操作期间,如果使能,起始位的下降沿将激活回切。将设置串行端口活动监视器位,然后串行端口将检查有效的起始位。如果接收到起始位,则串行接收将正常继续,并在接收到整个字(如果启用)时产生中断。为了最小化功耗,如果在除4模式下不需要进一步处理,PMM可以在串口中断服务程序开始时再次启用。

这是有可能经历一个“虚假”切换引起的噪声串行端口。在RX引脚上的第一个下降沿上启动切换,并开始寻找有效的起始位。如果没有收到有效的起始位,系统将中止串行活动,清除活动位,并且不会执行串口中断。然而,切换已经启动,设备现在正在全速运行。为了使设备恢复到PMM,用户必须手动重置时钟分频器位。

图5所示的代码片段演示了无效返回除以4模式的一个可能的测试。这个测试可以插入到主代码循环中,在那里它将定期执行,或者它可以作为定时器中断例程的一部分。如果没有中断或串行端口处于活动状态,则很可能设备应该处于PMM模式,而不是除以4模式。这段代码应该根据具体的配置定制,也就是说,如果在低优先级中断中应该允许PMM,那么在测试状态寄存器时屏蔽掉该位。


图5 无效的回切测试例。

PMM中的多处理器通信

如果使用多处理器通信协议,则会影响PMM的有效性和切换特性。微控制器包括在同一串行端口上支持多个处理器的功能。在串行端口模式2和3中,可以使用SM2标志(SCON0.5或SCON1.5)来表示接收到的字节是一个地址。从地址识别寄存器(SADDR0;A9h, SADDR1;AAh, SADEN0;B9h, SADEN1;BAh)可以被编程为当接收到的地址与用户定义的模式不匹配时忽略传输(不导致接收端中断)。

多处理器通信对电源管理的含义是,切换是通过检测串行端口上的第一个下降沿而产生的,而不是产生有效中断。因此,一个应该被特定处理器忽略的无效地址仍然会产生回切。通常,该部件可以在串行端口中断服务程序开始时返回到PMM。不幸的是,在上面提到的情况下,不会产生中断。为了缓解这个问题,应该避免将多处理器通信方案与PMM结合使用。如果系统电源考虑允许偶尔出现错误的回切,则可以使用图5所示的轮询方案将设备放回PMM。

时钟源控制

通过控制系统时钟源,系统设计者可以同时实现更高的性能和更低的功耗。为了提供最大的灵活性,微控制器将从三个时钟源操作:

  1. 外部晶体(使用内部晶体振荡器)

  2. 外部时钟振荡器

  3. 内环振荡器


外部晶体


最常见的时钟源是外部晶体。微控制器集成了一个晶体放大器,其设计用于在设备的工作范围内驱动工业标准晶体。外部晶体为依赖时间的外设(如内部定时器和串行端口)以及设备操作提供高度精确的时钟源。微控制器需要基模,并行谐振(也称为反谐振)AT-cut晶体。晶体振荡器有显著的启动时间,然而,这可以延迟设备的操作时,接通电源或从停止模式恢复。微控制器必须在上电复位后通过外部晶体或外部时钟源启动操作。


外部时钟源


如果系统中已经存在时钟振荡器,则可以将其用作外部时钟源。外部时钟振荡器遭受相同的启动延迟作为内部晶体振荡器,不提供任何特殊的好处。外部晶体或外部时钟源可用于在上电复位或断电复位后对设备进行时钟。


环形振荡器


环形振荡器是微控制器内部的一个低功耗数字振荡器。它可以用作主系统时钟,而不是外部晶体或时钟振荡器,在除立即上电复位之外的任何时间。当使能时,它为设备操作提供4MHz时钟源。这通常是一个比系统时钟更低的频率,这提供了一个显著的电力节省。一旦器件切换到环形振荡器作为时钟源,可以禁用外部晶体放大器,进一步降低功耗。

此外,环形振荡器消除了与晶体振荡器相关的延迟,并提供了从停止模式几乎瞬时启动。当用于从停止模式重新启动时,环形振荡器将至少运行65,536个时钟周期,此时它可以自动切换到外部晶体或继续从环形振荡器运行。然而,环形振荡器不能用于从上电状态对设备进行时钟。由于环形振荡器不表现出与外部时钟一样多的稳定性,时序测量或串行端口数据传输不应在使用环形振荡器作为时钟源时进行。

环形振荡器在只需要spc突发处理的应用中具有广泛的适用性。这样的系统偶尔会从停止模式唤醒,执行一些活动,然后返回到停止模式。环形振荡器允许系统从最低功率状态快速切换,执行操作,然后返回到低功率状态,而无需重新启动暂停的外部晶体。图6显示了使用和不使用环形振荡器从Stop模式重新启动的优点。


图6 环形振荡器的优点。

  1. 图中假设Stop之后的操作需要不到18毫秒的时间来完成。

  2. 与晶体放大器相比,由于环形振荡电流减少,额外的功率节省。


即使在恢复停止模式后不久需要与时间相关的功能,环形振荡器也可能是有益的。通常,有一些处理是必要的,伴随着定时例程或串行端口传输。在执行停止命令之前,设备应切换到晶体作为时钟源,并设置RGSL位。在从停止状态恢复后,设备可以在从环形振荡器运行时执行代码,为时序相关操作做准备。然后设备可以循环,直到RGMD位被清除,这表明晶体或外部时钟源现在是时钟源,并且可以开始计时相关的操作。

时钟控制位

表3 时钟控制和状态位汇总
位名称位置函数重置写访问
XT /“RG-bar”EXIF.3水晶/戒指时钟源选择
0 =选择环形振荡器作为时钟源
1 =选择晶体时钟或外部时钟作为时钟源
10随时;当XTUP= 1, XTOFF= 0
RGMDEXIF.2环振模式状态。
0 =当前时钟源为晶体时钟或外部时钟。
1 =环形振荡器是电流时钟源。
0没有一个
RGSLEXIF.1环形振荡器选择,停止模式。
0 =恢复Stop模式时,时钟源为晶体时钟或外部时钟。
1 =从停止模式恢复时,环形振荡器将作为时钟源

注:晶体预热结束后,设备将切换到XT/“RG-bar”位指定的时钟源。
除上电复位后无变化,清除为0。不受限制的
XTOFFPMR.3晶体振荡器禁用。
0 =开启晶振。
1 =晶体振荡器关闭。设备从环形振荡器运行。
00随时;当XT/“RG-bar”= 0时为1
XTUPSTATUS.4晶体振荡器预热状态。
0 =振荡器预热仍在进行中。
1 =振荡器预热完成。
1没有一个

晶体振荡器启动延时

当晶体振荡器在一段时间不工作后通电时,在脉冲的幅度足以提供稳定的时钟源之前,需要很短的时间。这可能导致丢失或损坏的时钟信号,可能中断处理器的操作。为了确保有效的时钟信号,在允许设备恢复运行之前,晶体启动计数器检测外部晶体或时钟振荡器的65,536个振荡。这意味着使用较慢晶体的设备将有较长的晶体启动时间。晶体启动计数器比内部时钟电路更灵敏,并使用坏脉冲和好脉冲的计数来确定预热周期。选择计数器值是为了让大多数晶体在释放设备以运行外部晶体之前有足够的时间稳定下来。只要XTOFF位被清除,计数器就会复位。

晶体启动计数器的状态可以通过查看晶体振荡器预热状态位XTUP (status .4)来确定。请注意,这个位总是在上电复位时设置,因为在设备恢复操作之前计数器必须超时。出于同样的原因,当XT/“RG-bar”位设置为1时,从停止模式恢复时也将设置该位。当从环形振荡器切换到晶体振荡器时,XTUP位可以用来告诉晶体何时稳定。在设置XTUP位之前尝试切换到外部晶体将被忽略。

时钟源切换

有时,器件可能希望在环形振荡器和晶体振荡器之间切换。该设备可以随时切换到环形振荡器,因为没有与环形振荡器相关的启动延迟。清除晶体振荡器/环形振荡器选择位,XT/“RG-bar”(EXIF.3)将启用环形振荡器。如果不期望很快需要晶体振荡器,可以通过设置晶体振荡器禁用位XTOFF (PMR.3)来禁用晶体振荡器。这将大大节省电力。请注意,清除XT/“RG-bar”位不会自动禁用晶体放大器。

由于外部晶体固有的启动延迟,将时钟源从环形振荡器切换到晶体振荡器更加复杂。操作步骤如下:

  1. 清除晶体振荡器禁用位,XTOFF (PMR.3)重新启动晶体振荡器。

  2. 等待晶振预热状态位XTUP (Status .4)设置完成,表示外部晶振预热完成。

  3. 设置晶体振荡器/环振荡器选择位,XT/RG (EXIF.3)选择晶体作为时钟源。

复位后的时钟源

上电复位后,RGSL位被清除,XT/“RG-bar”位被设置。这迫使设备从外部晶体或外部时钟源操作,而不管事件之前的时钟源。晶体启动计数器将被重置并开始倒计时,让晶体在恢复运行之前稳定下来。

在外部(硬件)和看门狗复位的情况下,XT/“RG-bar”位将保持不变。这允许设备从复位事件之前活动的同一时钟源继续。不管XT/“RG-bar”位的状态如何,XTOFF位在复位后被清除,这开始了晶体振荡器的预热。如果晶体将不被使用,适当的复位例程应该设置XTOFF位来禁用晶体振荡器以节省功率。

停止后时钟源

在停止模式内部时钟停止。在接收到外部中断或复位后,设备将在进入停止模式之前使用XTOFF, XT/“RG-bar”和RGSL位的状态来确定环形振荡器和晶体放大器的状态。可能的配置如表4所示。

表4 停止模式确定后的时钟源
XT /“RG-bar”XTOFFRGSL退出停止模式时的时钟源时钟源经过晶体预热期恢复时启动延迟?晶体振荡器状态
00x环形振荡器环形振荡器没有启用
01x环形振荡器环形振荡器没有56540
100晶体振荡器晶体振荡器是的启用
101环形振荡器晶体振荡器没有启用

如果进入停止模式前的时钟源是环形振荡器,则设备将使用环形振荡器恢复工作,并在晶体预热期后继续从环形振荡器运行。如果设备从晶体振荡器运行进入停止模式,当从停止模式恢复时,环形振荡器选择,停止模式位,RGSL (EXIF.1)决定时钟源。在完成晶体预热期后,器件可以继续从环形振荡器工作,也可以切换到外部晶体或时钟源。这是由进入停止模式之前的XT/“RG-bar”位的状态决定的。

应该注意的是,如果在进入停止模式之前设置了XT/“RG-bar”位,晶体放大器将自动开始预热期。如果设备从外部晶体或外部振荡器运行,或者如果它从环形振荡器运行,但晶体放大器仍在运行,则会发生这种情况。(虽然这不是一个合乎逻辑的选择,但理论上是可能的。)然而,当从环形振荡器恢复并打算继续从环形振荡器时,启动晶体预热过程是不必要的。为了防止晶体预热,在进入停止模式之前,请确保设备从环形振荡器运行,并设置XTOFF位。

环形振荡器特别适用于需要从停止模式恢复后进行短脉冲处理的系统。从环操作允许系统唤醒,执行一个短的操作,并在更短的时间内返回到停止模式,这将需要一个外部晶体来稳定。这可以节省两倍的功率:由于环形振荡器的快速启动,停止模式的超时时间减少,并且环形振荡器本身通常比晶体放大器使用更少的功率。

环形振荡器注意事项

高速微控制器系列中使用的环形振荡器本质上是一个具有传播延迟的逆变器链。虽然它具有快速启动时间,但它不具有压电石英晶体振荡器的稳定性。环形振荡器将在为设备指定的温度和电压范围内从3到4MHz振荡。这种变化使得难以为计时器和对时间敏感的操作生成稳定的时基。由于主系统时钟的变化,中断延迟也将更加难以计算。

从环形振荡器运行时,不建议使用异步模式(模式1、模式2、模式3)操作串口。串行端口使用内部计时器来生成波特率,产生的频率不够稳定,无法支持异步串行传输。然而,由于主机处理器产生同步时钟,模式0的同步串行传输是可能的。

环形振荡器的使用不会影响实时时钟、看门狗定时器或定时访问操作的运行。DS87C530内置的实时时钟由一个独立于系统时钟的外部32 kHz晶体激发。看门狗定时器和定时访问程序都是相对于内部时钟周期起作用的,而不是绝对的时间参考,并且会正常工作。如果看门狗定时器需要一个绝对时间段,那么建议使用外部时钟源。

执行“环形振荡器切换”

切换功能允许设备在PMM1或PMM2中操作时“唤醒”串行端口操作。尽管无论时钟源如何,设备都将执行回切,但设备必须从晶体或外部时钟源操作,才能成功进行串行操作。在大多数情况下,如果期望串行端口操作,这将排除使用环形振荡器或停止模式。然而,在接收到串行传输时,可以从环形振荡器“切换”到晶体。

在串行传输的情况下,环形振荡器几乎没有问题;该系统可以简单地启用晶体振荡器,等待晶体稳定,然后开始传输。串行接收比较困难。从环形振荡器操作的微控制器无法在第一次尝试时成功捕获串行数据传输。一种可能的解决方案是使用握手协议来确认接收方已经准备好,并且应该重新发送数据。这种方案的关键是检测到已尝试的串行操作并执行将切换到晶体源的一段代码。

推荐的方法利用外部中断作为串行端口活动监视器。如果负沿触发中断,如/INTO\、/INT1\、/INT3\或/INT5\与RX引脚相连,则起始位的下降沿将产生中断和回切。中断服务程序将启用晶体时钟源并等待,直到它稳定,此时设备将发送一个就绪信号回始发器。下面的代码示例演示了这样做的一种方法。

此外,当从环形振荡器运行时,可以通过使能晶体放大器来避免与重新启动晶体相关的延迟。乍一看,这似乎适得其反,因为与单独从环形振荡器运行相比,它稍微增加了功耗。然而,当从相对高速的晶体操作器件时,环形振荡器的速度降低仍然导致净功率节省。

程序示例:软件环振开关

程序RING_SWB;;这个程序展示了串口如何与环形振荡器一起工作。当接收到一个字节时,起始位的下降沿将产生一个INT1。INT1 ISR将重新启动晶体振荡器;当晶体稳定后,系统将发送一个就绪字符;给发起者,表示接收器已准备好;程序核心连续扫描端口1并记录最大值。程序执行两个操作:发送记录的最大值,并将最大值重置为0。接收到无效的命令将导致设备向主机返回错误代码并切换回环形振荡器。无效代码也可以用于在数据传输完成时故意将设备返回环形振荡器。有效命令将回荡回到发起者,确认收据 .;***************************************************************************; 注册80 h EquatesP0装备;端口0 81 h sp装备;堆栈PointerPCON装备87 h;功率控制89 h RegisterTMOD装备;计时器模式控制8 dh RegisterTH1装备;定时器1 MSB(用于生成波特率)P1装备90 h,端口1 91 h exif装备;外部中断标志98 h RegisterSCON0装备;串口0 99 h控制RegisterSBUF0装备;串口0数据BufferIE装备中断使能RegisterP3 equ 0B0h;端口3PMR equ 0C4h;电源管理RegisterSTATUS equ 0C5h;状态RegisterACC equ 0E0h;Accumulator;R0:命令寄存器;R1:端口1观测到的最大值;位EquatesRI_0 equ 98h;串口0接收端中断FlagTI_0 equ 99h;串口0发送端中断FlagIE1 equ 8Ah;TR1 equ 8Eh;Timer 1运行控制。REN_0 equ 9Ch;串口0接收端EnableEX1 equ 0AAh;外部中断1 EnableEA equ 0AFh;全局中断使能;String EquatesRDY_CHAR equ Õ!ÕERR_CHAR equ Õ?Õ;中断向量表。重置向量。ljmp STARTcseg在13h;外部中断1向量。ljmp EXT_INT1cseg在23h;串行中断0向量。ljmp SER0_INTcseg at 100h;代码段开始。启动:MOV SP, #40h;MOV P3, #0Fh;设置端口引脚为输入。MOV P1, #0FFh;设置端口引脚为输入。呼叫RING_ENA;切换到环形振荡器以节省电力。MOV TMOD, #20h;设置定时器为19200波特率在11.059MHzMOV TMOD, #20h;设置定时器为模式2以产生波特率。MOV SCON0, #50h;选择模式1,使能接收器。ORL PCON, #80h;设置SMOD为19200运行。SETB TR1;启动定时器1用于波特率生成。MOV IE, #94h;使能全局,串行0和输出中断1。MOV R1, #0;复位最大值计数器。CLR_BUF: MOV R0, #0;这是命令后的重入点;清除命令缓冲区的完成。然后进入主prog循环。MAIN: CJNE R0, #0, COMMAND;如果R0<>0,则表示service pending COMMAND。获取当前端口值。创建端口值的临时副本。比较电流值与最大值。如果更小,A R1;或者等于,回圈进行下一次检查。POP ACC;恢复端口值。注意,这不会;如果SUBB中的数字为负数,则value不为;一个新的最大值,继续。我们有一个新的最大值。储存它。JMP MAIN;主程序结束loopCOMMAND: CJNE R0, #Õ1Õ, CHECK_2;如果command不是XMIT_MAX,则继续。XMIT_MAX: MOV A, STATUS;主机请求最大值。等待直到jb ACC.1, XMIT_MAX;串口传输活动完成。MOV SBUF0, R1;发送最大值回主机。返回到主循环,等待下一个命令。CHECK_2: CJNE R0, #Õ2Õ,无效;如果命令不是RESET_MAX,则返回;已收到无效命令。RESET_MAX: MOV R1, #0;被重置。零值并返回;邮件循环以等待下一个命令。无效:MOV SBUF0, #ERR_CHAR;收到无效命令。返回环形振荡器并清除jmp CLR_BUF;命令缓冲区。这也将被称为;被发信人故意退回的;环形振荡器的设备 .;***************************************************************************; SER0_INT——这ISR处理串口0中断。接收中断;将由收到发送者的命令字节引起。然后该字节将回显以确认接收。;;发送中断被数据的传输所调用;发起人或地位的角色 .;*************************************************************************** SER0_INT: JB TI_0 XMIT_INT;确定的中断源。MOV R0, SBUF0;中断串行接收。保存命令clr RI_0;R0中的字节用于主程序循环并清除;接收器中断标志。MOV SBUF0, R0;回显数据确认接收。CLR TI_0;中断是由发射机引起的。
ClearRETI;中断标志,并返回 .;***************************************************************************; EXT_INT1——这ISR重启响应下降沿的晶体;在INT0引脚上,该引脚也连接到串口0 RX引脚。当晶体稳定后,它向发起者发送就绪信号。进一步禁用int1,直到接收到数据以禁止;启动晶体振荡器mov SBUF0, #RDY_CHAR;发送就绪信号CLR RI_0;任何串行端口接收器在此中断;点是错误的,所以忽略them.RETI ;***************************************************************************; XTAL_ENA——这个子程序检查水晶正在运行,如果;不是,使它和等待,直到它已经稳定 .;*************************************************************************** XTAL_ENA:推动ACC;节省accumulatorANL PMR, # 0 f7h;明确XTOFF重启晶体。XTUP:循环直到晶体稳定。JNB c .4, XTALWAITORL EXIF, #08h;切换到水晶作为时钟源。SETB REN_0;晶体激活,使能接收器。恢复累加器。设备现在从水晶中运行。退出 .;***************************************************************************; RING_ENA——这个子程序检查是否有任何串行端口;活动,如果没有,切换回环形振荡器 .;*************************************************************************** RING_ENA:推动ACC;拯救accumulatorWAIT_SERIAL: MOV,地位;测试低的地位reg serialANL一咬,# 0跳频;港口的活动。如果串口仍然是jnz WAIT_SERIAL;激活,请等待切换到铃声。运行时忽略任何串口活动;从环形振荡器。清除所有未完成的串行中断setb EX1;可能已生成的串行数据和;重新使能外部中断1以检测;开始另一个串行传输。ANL EXIF, #0F7h;清除XT/RG使能环形振荡器。ORL PMR, #08h;设置XTOFF位禁用晶体。恢复累加器。设备正在从环中运行。退出。

开发电源管理框架

Maxim的电源管理方法允许系统设计人员在保持最大性能的同时降低功耗。为了实现最大可能的节省,应该仔细分析设备的运行条件并开发电源管理方案。

确定使用哪种电源管理模式、何时切换模式以及如何处理高优先级任务取决于应用程序。没有一种方法适合所有可能的组合。一般来说,时钟速度和源的选择取决于所分配的任务,以及与时间相关的操作(如串行端口活动)的需要。

采用电源管理的系统有两种基本类型。第一种是休眠或几乎所有操作时间都处于待机状态的系统,例如Stop或PMM2。这些系统通常在无人值守的系统中用于收集数据或作为环境监测仪。它们的特点是在特定的时间间隔内相对较少的I/O活动。第二类系统通常在多个设备上执行高速率的I/O活动,否则必须持续运行。在这种情况下,休眠方法是不切实际的,因为设备将花费大部分时间从低功耗状态重新启动。下面几节将更详细地讨论这两种方法。

突发模式操作

一种常见的操作模式是让设备在低功耗状态下运行,执行一个简短的任务,然后将设备重新置于低功耗状态,直到发生另一个事件。诸如键盘或读卡器活动之类的操作属于这一类。这样的外设通常产生一个外部中断,该中断执行切换或从停止模式恢复。

决定将什么指定为备用状态取决于将启动返回活动状态的活动的类型。如果期望串行端口活动,那么备用状态必须是可以接收串行数据的状态,例如PMM2。能够容忍较长中断延迟的系统可以使用停止模式作为低功耗状态。

对各种模式下的功耗的检查表明,当使用突发模式方法时,可以通过在除以4模式下操作而不是在pmm模式下操作来获得最大的功耗节省。除以4模式的性能是PMM1的16倍,但消耗的电流只有PMM1的4倍。更高的功率/性能比除以4模式意味着子程序期间消耗的总能量更少。因此,从停止模式唤醒的例程执行短暂的活动爆发,然后返回到停止模式应该以除以4的模式这样做。

程序示例:远程数据记录器

下面的程序演示了一个运行远程、电池供电的数据记录设备的通用方案,它只需要使用spor c。在本例中,DS87C530在停止模式下“休眠”,直到按下键盘并执行某些操作。操作完成后,设备将返回到“停止”模式。除非期望或正在进行串行传输,否则该设备在其唤醒状态的大部分时间内运行环形振荡器。周期性的实时时钟中断将导致器件从外部源获取数据,将其记录在片上SRAM中,并返回到停止模式。图7显示了设备如何工作的状态图。虽然本例使用DS87C530的内部实时时钟,但可以很容易地修改它,使其与PMM2中的内部计时器或外部实时时钟一起工作。


图7 远程数据记录器示例状态图。

程序示例:突发模式数据记录器

;***************************************************************************; 程序DATA_LOG;;此程序演示突发模态操作在数据记录器的设备。设备保持在停止模式,直到实时时钟或外部中断恢复操作。当一个操作完成后,设备将切换回环形振荡器并返回到停止模式。实时时钟将每小时中断系统两次,从端口1读取一个值,它将存储该值,直到被请求。中断在开始数据采集的时间被调用。所提供的程序简单而通用,因此数据可以来自D/ a转换器或温度传感器,例如,当接收到外部中断时,设备将启动晶体放大器,期望可能的串行端口活动,但继续从环形振荡器操作。如果检测到串行活动或需要串行活动,则设备将保持操作直到晶体加热。***************************************************************************;寄存器等于表p0 equ 80h;端口0 LatchSP equ 81h;堆栈指针dpl equ 82h;数据指针0低RegisterDPH1 equ 83h;数据指针高RegisterDPH1 equ 84h;数据指针1低RegisterDPH1 equ 85h;数据指针高RegisterDPS equ 86h;数据指针选择RegisterPCON equ 87h;电源控制RegisterTCON equ 88h;定时器控制RegisterTMOD equ 89h;定时器模式RegisterTH1 equ 8Dh定时器1 MSBP1 equ 90h; 1口LatchEXIF equ 91h;外部中断标志RegisterSCON0 equ 98h;串口0控制RegisterSBUF0 equ 99h;串口0数据缓冲p2 equ 0A0h;端口2 LatchIE equ 0A8h;中断使能RegisterP3 equ 0B0h;端口3 LatchIP equ 0B8h;中断优先级RegisterPMR equ 0C4h;电源管理RegisterSTATUS equ 0C5h;状态RegisterTA equ 0C7h;定时访问RegisterACC equ 0E0h; accumulatorie equ 0E8h;扩展中断使能RegisterRTASS equ 0F2h实时告警秒RegisterRTAS equ 0F3h;实时告警秒RegisterRTAM equ 0F4h;实时告警分钟RegisterEIP equ 0F9h;扩展中断优先级RegisterRTCC equ 0F9h;实时时钟控制;位相等表tableRI_0 equ 98h;串口0接收中断FlagTI_0 equ 99h;串口0发送中断FlagEX1 equ 0AAh;外部中断1使能bitF0 equ 0D5h;通用标志;常数相等表tableDATA_TABLE equ 0000h向量。ljmp STARTcseg在13h;外部中断1向量。ljmp EXT_INT1cseg在23h;串行中断0向量。ljmp SER_INT0cseg at 6Bh;实时时钟中断向量。代码段的起始点。启动:MOV SP, #80h;MOV P1, #0FFh;设置端口1为输入Set RXD0, TXD0 &INT1作为输入。MOV PMR, #01h;选择片上SRAM。MOV RTAM, #00h;设置分、秒、次秒报警。MOV RTAS, #00h;闹钟将在小时mov RTASS, #00h上每小时唤醒设备;启动温度采集。MOV TA, #0AAh;定时写入使能分,秒,MOV TA, #55h;亚秒比较。ORL RTCC, #0C1hMOV SCON0, #050h;设置串口0为模式3MOV TH1, #0E6h;定时器1在24MHz 2400波特时重新加载值。MOV TMOD, #20h;设置定时器1为8位自动加载并启动。MOV TCON, #40hMOV IP, #10h;串口0和RTC高优先级中断MOV EIP, #20h;这样他们就可以打断Ext. interrupt 1例程。MOV eee, #20h;启用串口0,输出输入1和mov IE, #94h;RTC中断 .;***************************************************************************; 这是主程序循环。它什么也不做,只是等待中断,并且;当它们完成后,切换回环形振荡器,并将;部分回停止模式 .;*************************************************************************** 主要:退火EXIF # 0 f7h;切换到戒指。ORL EXIF, # 2h;ORL PMR, #08h;禁用水晶。设置停止位以停止设备。JMP主,主程序循环的结束 ;***************************************************************************; SER_INT0——这ISR处理串口0中断。串口中断;只有当设备处于“活动”状态时才有可能;键盘按键。这个中断的主要功能是传输;下一个字符表中,直到所有数据已经发送 .;*************************************************************************** SER_INT0: JB TI_0 XMIT_INT;测试传输或接收中断。CLR RI_0;这个例子不接收串行数据。RETI;为了完整性,包含了这段代码。清除发送中断并发送下一个字节。检查我们是否在jne的末尾A, DPL, NOT_END;数据。
若DPTR0和DPTR1相同,则mov A, DPH1;然后所有的数据都发送了。我们已经到达了积分表的末端。RETI;设置完成标志并退出。NOT_END: PUSH DPS;保留当前数据指针。MOV DPS, #01h;切换到DPTR1跟踪数据指针。我们仍然有数据,所以传输它,恢复mov SBUF0, A;数据指针,并返回以发送下一个字节。流行DPSRETI ;***************************************************************************; ISR EXT_INT1——这是由活动在键盘上。它导致;设备读取端口0上的命令并采取相应的操作。这个简单的例子执行两个函数:;1. 通过串口0将存储的数据下载到主机;2. 通过复位数据指针清除数据表。如果命令是下载存储的数据,则会切换到;水晶。F0标志用来表示当所有的数据;已发送。这可以防止软件退出ISR;和重返前停止模式传输的所有数据 .;*************************************************************************** EXT_INT1:退火PMR, # 0 f7h;使晶体可能系列活动。MOV A, P0;读取0口数据,取ecjne A, #00h, CHECK_2;适当的行动。JMP DNLOADCHECK_2: CJNE A, #01h, INVALIDCLEAR: MOV DPTR, #DATA_TABLE;MOV A,#0h;重置数据指针。使用A来快速填充。NEXT_LOC: MOVX @DPTR, A;填充位置&递增到下一个。INC DPTRMOV R0, DPH;如果DPH不是04,则进行下一个定位。CJNE R0, #04h, NEXT_LOCMOV DPTR, #DATA_TABLE;片上SRAM已被清除。ResetRETI;指向表开头和返回的指针。DNLOAD: MOV A, STATUS;等待晶体稳定。JNB c .4, DNLOADORL EXIF, #08h;MOV, #”!发送起始字符。剩余mov SBUF0, A;数据将通过串行端口jnb F0, $;在这里循环,直到整个表被传输。CLR F0;传输完成。清除完成标志。MOV DPS, #01h;切换到DPTR1,复位传输指针。切换回DPTR0,记录数据。ANL EXIF, #0F7h;Switch back to ring oscillator and returnINVALID: RETI;停止模式 .;***************************************************************************; ISR RTC_INT——这是用于读取从端口1的值。它被称为每一个;30分钟,并将数据记录到数据缓冲区。一旦完成,它就会;返回主循环,再次进入停止模式。这个简单的例子假设设备将在之前被读取;数据溢出片上SRAM,因此没有错误检查;包括 .;*************************************************************************** RTC_INT:退火RTCC # 0外籍;明确RTC中断标志。PUSH ACC;保存累加器。保存数据指针,以防我们中断mov DPS,#0h;数据下载,并切换到数据指针0。MOV A, P1;从端口1读取数据,存储在数据表中。指向下一个位置。XRL RTAM,#1Eh;在0 &amp之间切换RTC报警分钟寄存器;每隔一小时或半小时打断一次。恢复数据指针选择器和累加器。流行ACCRETI

渐进的省电

通常,设备需要在少量活动期间持续运行。这可能是为了监视系统状态,或者为关键事件计时。虽然这样的系统可以忍受一些性能下降以节省电力,但它不能通过使用Stop模式停止操作。电源管理模式允许软件根据任务的数量和类型逐渐降低系统性能。这种方法类似于个人计算机所使用的方法,在指定的时间内不活动将导致系统将其速度降低到下一个较低的性能水平。

何时切换模式以及在哪种模式之间切换取决于用户的应用程序。构建“电源路径”是确定合适的速度和时钟源的最简单方法。对于一个相对简单的系统,只需要几个状态。电源管理模式PMM1和PMM2是专门为这种逐步降低功耗而设计的。

图8展示了使用电源管理功能可能出现的多种电源路径。图8a显示了一个相对复杂的方案,该方案逐步降低运行速度,同时保持时钟振荡器尽可能长时间运行以执行与时间相关的功能。图8b切换到环形振荡器并逐渐降低器件的速度,但保持晶体放大器使能,以防器件需要快速响应串行端口活动。图8c提供了切换到环形振荡器并禁用晶体放大器的最低功耗。


图8 采样电源路径。

程序示例:系统监视器

下面的程序说明了操作一个不断监视系统状态的设备的基本方案。它的运作方式类似于个人电脑管理其电源的方式;如果在指定的时间内未检测到任何活动,则切换到下一个较低的省电模式。

该程序监视端口1上的外设,并根据需要更新映射到外部存储器中的显示。看门狗定时器用于轮询系统的状态,由F0标志表示。如果在计时器超时之前没有活动,设备将继续降低其速度。因为看门狗定时器周期受设备速度的影响,看门狗分割比率被调整为尽可能保持恒定的间隔。所演示的方法也可用于检测由串行端口上的噪声引起的虚假切换,并将设备返回到PMM。

程序示例:逐步断电

;***************************************************************************; 程序GRADUAL.ASM;;这个程序显示了一个渐进的版本的电源管理。看门狗计时器用于定期检查F0标志,以查看自上次计时器中断以来是否发生了任何活动。这个例子还演示了外部中断是如何与看门狗定时器一起使用的。***************************************************************************;寄存器等于表leckcon equ 8Eh;时钟控制RegisterP1 equ 90h;端口1IE equ 0A8h;中断使能RegisterPMR equ 0C4h;电源管理RegisterSTATUS equ 0C5h;状态RegisterTA equ 0C7h访问RegisterWDCON equ 0D8h;看门狗控制RegisterACC equ 0E0h;AccumulatorEIE equ 0E8h;扩展中断使能RegisterOLD_VAL equ 0CDh;外部设备的上一个值;注意这个位置通常是TH2,但是;我们使用它作为直接寄存器指令;F0 equ 0D5h;通用用户标志。看门狗中断标志。看门狗中断使能;定义等价表。显示设备2000h;显示的外部位置。重置向量。ljmp STARTcseg at 63h;看门狗定时器中断矢量。ljmp WDOG_INT;cseg at 100h;代码段开始复位看门狗timerMOV DPTR, #DISPLAY;设置数据指针到显示位置。CLR F0;清除活动标志mov CKCON, #0C1h;设置看门狗分割比为2**26MOV eee, #10h;Watchdog Interrupt Enable。MOV IE, #80h;MOV OLD_VAL,P1MAIN: MOV A, P1;CJNE A, OLD_VAL, DIFF;如果不同,开始显示更新。JMP MAINDIFF: MOV CKCON, #0C1h;返回看门狗分割比到慢速。MOV PMR, #041h;切换回除以4模式保存新值。将新值显示。SETB F0;设置标志,表明我们有活动。重新启用看门狗中断(在case device中);JMP主要操作/ 1024),主程序循环的终结 ;***************************************************************************; WDOG_INT——这ISR定期测试活动,如果没有;检测到,将设备降至下一个较低时钟速度。因为看门狗间隔是时钟除数的函数,;在每种模式下修改看门狗分割比以保持a;相对恒定的中断频率。下表;显示频率,假设晶体速度为25MHz;当设备进入/1024模式时,禁用看门狗;中断,因为没有更慢的速度进入。;;时钟模式分割比WD1 WD0看门狗超时;除以4 2**26 1 1 2684 mS;PMM1 (/ 64) 2 * * 23 1 0 5368 mS ;*************************************************************************** WDOG_INT: JB F0, DONEWDOG;如果活动被发现,不改变;速度。PUSH ACC;保存累加器。MOV A, PMR;检查电流速度。如果CD1 = 0,则模式为/4,则切换到/64。D64TO1024: MOV PMR, #041h;速度现在是/64。通过firstMOV PMR, #0C1h改变到/1024;从/64到/4再从/4到/1024。因为我们现在在/1024,没有必要;要慢一点,请禁用看门狗中断。D1024: POP ACC;恢复累加器。清除活动标志。MOV TA, #0AAh;定时访问清除Watchdog中断标志。MOV A, #55hCLR WDIFRETI;ExitD4TO64: MOV A, STATUS;速度现在是/4。改为/64。因为weANL A, #0CFh;进入PMM,测试活动情况。检查allJNZ D1024;状态寄存器中除XTUP和LIP之外的位;因为看门狗中断是低优先级的。如果设置了任何活动钻头,则中止速度更改。没有任何活动。将时钟改为/64。将看门狗分割比率从2^26更改为2^23。JMP D1024

隙禁用

用于检测电源故障的带隙基准功耗约为150µa。在停止模式,这可以是总电流的一个可观的数额。微控制器支持禁用带隙参考的选项,消除相关的电流损耗。当禁用时,设备失去产生电源故障中断或电源故障复位的能力。设备将继续工作,直到V(CC)低于V(RST),此时设备将停止工作。没有带隙参考,设备就没有办法检测即将发生的功率损失,或者执行有序关机。当电源恢复时,设备将执行上电复位。

设置带隙选择位,BGS (EXIF.0)在停止模式下启用带隙参考。默认或复位条件是在停止模式期间清除比特并禁用带隙。请注意,这个位只能使用定时访问写来更改。在全功率、PMM或空闲模式下,它无法控制基准。



声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: