STC32G12K128单片机的电源管理由电源控制寄存器(PCON)实现,其格式如表3.26所示。
表3.26 PCON的格式
1.空闲模式的进入
PCON.0(IDL)为空闲模式的控制位。置位PCON.0(IDL)后,单片机进入空闲模式。当单片机被唤醒后,该位由硬件自动清零。
2.空闲模式的状态
单片机进入空闲模式后,只有CPU停止工作,其他外设依然运行。
3.空闲模式的退出
有两种方式可以退出空闲模式。
①外部复位引脚RST的硬件复位,将复位引脚的电平拉低,产生复位。这种拉低复位引脚电平来产生复位的信号源需要被保持24个时钟周期加上20μs,才能产生作用,之后再将复位引脚的电平拉高,结束复位,单片机从用户程序FF0000H处开始进入正常工作模式。
②外部中断、定时器中断、低电压检测中断及A/D转换中的任何一个中断的产生都会引起PCON.0(IDL)被硬件清零,从而使单片机退出空闲模式。当单片机被唤醒后,CPU将继续执行进入空闲模式时正在执行的指令的下一条指令,之后将进入相应的中断服务子程序。
1.掉电模式的进入
PCON.1(PD)为掉电模式的控制位。置位PCON.1(PD),单片机进入掉电模式。当单片机被唤醒后,该位由硬件自动清零。
2.掉电模式的状态
单片机进入掉电模式后,CPU及全部外设均停止工作,但eram和xram中的数据是一直维持不变的。
3.掉电模式的退出
(1)通过外部复位引脚进行硬件复位可退出掉电模式。复位后,单片机从用户程序时FF0000H处开始进入正常的工作模式。
(2)INT0(P3.2)、INT1(P3.3)、INT2(P3.6)、INT3(P3.7)、INT4(P3.0)、T0(P3.4)、T1(P3.5)、T2(P1.2)、T3(P0.4)、T4(P0.6)、RXD(P3.0)、RXD2(P1.4)、RXD3(P0.0)、RXD4(P0.2)、I2C_SDA(P1.4)等中断及比较器中断、低压检测中断可唤醒单片机。以此方式唤醒单片机后,CPU将继续执行进入掉电模式时正在执行的指令的下一条指令,然后执行相应的中断服务子程序。
(3)使用内部的掉电唤醒专用定时器可唤醒单片机,该功能由特殊功能寄存器WKTCH和WKTCL管理与控制。WKTCH.7(WKTEN)为掉电唤醒专用定时器的使能控制位(1使能,0禁止)。掉电唤醒专用定时器是由WKTCH的低7位和WKTCL的8位构成的一个15位的寄存器,寄存器的设置范围为1~32766,设置该值时应注意,设置值要比实际计数值少1。
STC32G12K128单片机除增加了特殊功能寄存器WKTCH和WKTCL外,还设有两个隐藏的特殊功能寄存器WKTCH_CNT和WKTCL_CNT,用来控制内部的停机唤醒专用定时器。WKTCL_CNT和WKTCL共用一个地址(AAH),WKTCH_CNT和WKTCH共用一个地址(ABH),WKTCH_CNT和WKTCL_CNT是隐藏的,对用户是不可见的。WKTCH_CNT和WKTCL_CNT实际上用作计数器,而WKTCH和WKTCL用作比较寄存器。当用户对WKTCH和WKTCL写入内容时,该内容只写入WKTCH和WKTCL;当用户读WKTCH和WKTCL的内容时,实际上读的是WKTCH_CNT和WKTCL_CNT的内容,而不是WKTCH和WKTCL的内容。
以此方式唤醒单片机后,CPU将继续执行进入掉电模式时正在执行的指令的下一条指令。
掉电唤醒专用定时器有自己的时钟,其频率大约为32kHz,但误差较大。用户可通过读RAM区F8H和F9H的内容(F8H存放频率的高字节,F9H存放频率的低字节)来获取出厂时所记录的掉电唤醒专用定时器时钟频率。
掉电唤醒专用定时器定时时间=16×10 6 ×计数次数/ f wt (结果单位为微秒)。其中, f wt 为我们从RAM区F8H和F9H获取到的时钟频率。
【例3.1】 编程实现:LED以一定时间间隔闪烁,按下SW18按键,单片机进入空闲模式或者掉电模式,LED停止闪烁并停留在当前亮灭状态,SW18按键接单片机P3.3,LED连接单片机P4.7。
解: C语言程序如下:
【例3.2】 编写WKTCH和WKTCL的设置程序,实现:用内部掉电唤醒专用定时器将单片机从掉电状态唤醒,唤醒时间为500ms。
解: 设 wt f 为32kHz,根据前述公式计算掉电唤醒专用定时器的计数值:
WKTCH和WKTCL的计数值为计数次数1000减1,即999。因此,WKTCH=03H,WKTCL=E7H。
C语言程序如下:
特别注意: 当单片机进入空闲模式或者掉电模式后,由中断唤醒单片机后,CPU将继续执行进入空闲模式或者掉电模式时当前执行的指令的下一条指令,当下一条指令被执行后是继续执行后续指令还是转向执行中断服务子程序,这里还是有一定区别的,所以编程时,建议在设置单片机进入掉电模式的语句后加几条_nop_()语句(空语句)。