第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟...

75
2 : 0 2 : 5 6 1/75 第第 第第 第第第第第第第第第 第第第第第第 第第第第第第第第 第第第第第第第第第第第第第

description

第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制. 正确复位和合适的时钟是单片机正常工作的基础,而单片机的省电方式控制可以降低系统的功耗,从而实现低功耗设计。 本章介绍 STC15F2K60S2 单片机的复位、时钟配置方法和单片机的供电电源检测和控制。. §11.1 复位. 复位就是单片机的初始化工作,复位后中央处理器( CPU )及单片机内的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。 复位分为热启动复位和冷启动复位两种,它们的区别如表 11-1 所示。. 表 11-1 热启动复位和冷启动复位. - PowerPoint PPT Presentation

Transcript of 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟...

Page 1: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 1/75

第十一章复位、时钟和省电方式控制

本章学习目标掌握单片机的时钟掌握单片机的电源检测与控制

Page 2: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 2/75

正确复位和合适的时钟是单片机正常工作的基础,而单片机的省电方式控制可以降低系统的功耗,从而实现低功耗设计。

本章介绍 STC15F2K60S2 单片机的复位、时钟配置方法和单片机的供电电源检测和控制。

Page 3: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 3/75

复位就是单片机的初始化工作,复位后中央处理器( CPU )及单片机内的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。 复位分为热启动复位和冷启动复位两种,它们的区别如表 11-1 所示。

§11.1 复位

Page 4: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 4/75

复位种类 复位源 复位现象

热启动复位

内部看门狗复位 单片机直接从用户程序区 0000H 处开始执行用户程序

通过控制 RESET 引脚产生的硬复位 从用户程序区 0000H 处开始直接执行用户程序

通过对 IAP_CONTR 寄存器送入 20H 产生的软复位

从用户程序区 0000H 处开始直接执行用户程序

通过对 IAP_CONTR 寄存器送入 60H 产生的软复位

从系统 ISP 监控程序区开始执行程序,如果检测不到合法的 ISP 下载命令流,将软复位到用户程序区执行用户程序

冷启动复位 系统停电后再上电引起的硬复位

从系统 ISP 监控程序区开始执行程序,如果检测不到合法的 ISP 下载命令流,将软复位到用户程序区执行用户程序

表 11-1 热启动复位和冷启动复位

Page 5: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 5/75

STC15F2K60S2 单片机有 6 种复位方式外部 RST 引脚复位软件复位掉电复位 / 上电复位(并可选择增加额外的复位延时 180ms ,也叫 MAX810 专用复位电路,其实就是在上电复位后增加一个 180ms 复位延时)内部低电压检测复位MAX810 专用复位电路复位看门狗复位

Page 6: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 6/75

1 、外部 RST 引脚复位外部 RST 引脚复位就是从外部向 RST 引脚施加一定宽度的复位脉冲,从而实现单片机的复位。P5.4/RST 引脚出厂时被配置为 I/O 口,要将其配置为复位功能,可在使用 ISP 下载程序时设置。如果 P5.4/RST 引脚已在 ISP 烧录程序时被设置为复位脚,那 P5.4/RST 就是芯片复位的输入脚。将 RST 复位脚拉高并维持至少 24 个时钟加 20us 后,单片机会进入复位状态,将 RST 复位脚拉回低电平后,单片机结束复位状态并从用户程序区的 0000H 处开始正常工作。

Page 7: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 7/75

2 、软件复位在系统运行过程中,有时会根据特殊需求,需要实现单片机系统软复位(热启动之一),传统的 8051 单片机由于硬件上未支持此功能,用户必须用软件模拟实现,实现起来较麻烦。STC15F2K60S2 单片机利用 ISP/IAP 控制寄存器 IAP_CONTR (地址为 C7H ,复位值为0000 x000B )实现了此功能。用户只需简单的控制 IAP_CONTR 的其中两位 SWBS/SWRST 就可以系统复位了。

Page 8: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 8/75

ISP/IAP 控制寄存器 IAP_CONTR 的各位定义如下:

1) SWBS软件选择从用户应用程序区启动( 0 )从 ISP 程序区启动( 1 )要与 SWRST 配合才可以实现

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 IAPEN SWBS SWRST CMD_FAIL - WT2 WT1 WT0

Page 9: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 9/75

2) SWRST :产生软件复位控制位。0 :不操作1 :产生软件系统复位,硬件自动清 0

要与 SWRST 配合才可以实现

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 IAPEN SWBS SWRST CMD_FAIL - WT2 WT1 WT0

Page 10: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 10/75

下面的描述中,用户应用程序区简称 AP 区,系统 ISP 监控程序区简称 ISP 区。

例如,从 AP 区软件复位并切换到 AP 区开始执行程序的 IAP_CONTR 设置代码为:

MOV IAP_CONTR,#00100000B;SWBS=0,SWRST=1( 选择 AP 区软复位 )从 ISP 区软件复位并切换到 AP 区开始执行程序的 IAP_CONTR 设置代码为:

MOV IAP_CONTR,#00100000B;SWBS=0,SWRST=1( 选择 AP 区软复位 )

Page 11: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 11/75

从 AP 区软件复位并切换到 ISP 区开始执行程序的 IAP_CONTR 设置代码为:

MOV IAP_CONTR,#01100000B

;SWBS=1,SWRST=1( 选择 ISP 区软复位 )

从 ISP 区软件复位并切换到 ISP 区开始执行程序的 IAP_CONTR 设置代码为:

MOV IAP_CONTR,#01100000B

;SWBS=1,SWRST=1( 选择 ISP 区软复位 )

Page 12: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 12/75

3) CMD_FAIL 如果送了 ISP/IAP 命令,并对 IAP_TRIG 送5AH/A5H 触发失败,则为 1 ,需要由软件清 0 。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 IAPEN SWBS SWRST CMD_FAIL - WT2 WT1 WT0

Page 13: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 13/75

3 、掉电复位 / 上电复位当电源电压 VCC 低于掉电复位 / 上电复位检测门槛电压时,所有的逻辑电路都会复位。当内部 VCC 上升至上电复位检测门槛电压以上后,延迟 32768 个时钟,掉电复位 / 上电复位结束。

Page 14: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 14/75

4、MAX810 专用复位电路复位STC15F2K60S2 单片机内部集成了 MAX810专用复位电路。若 MAX810 专用复位电路在 STC-ISP 编程器中被允许,则以后掉电复位 / 上电复位后将再产生约 180ms 复位延时,复位才能被解除。

Page 15: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 15/75

5 、内部低压检测复位除 了 上 电 复 位 检 测 门 槛 电 压外, STC15F2K60S2 单片机还有一组更可靠的内部低电压检测门槛电压。当电源电压 VCC 低于内部低电压检测( LVD ) 门 槛 电 压 时 , 可 产 生 复 位 (前提是 在STC-ISP 编程用户程序时,允许低电压检测复位,即将低电压检测门槛电压设置为复位门槛电压)。

Page 16: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 16/75

STC15F2K60S2 单片机内置了 8级可选的内部低电压检测门槛电压。

5V单片机的低电压检测门槛电压 3V单片机的低电压检测门槛电压

-40℃ 25℃ 85℃ -40℃ 25℃ 85℃

4.74 4.64 4.60 3.11 3.08 3.09

4.41 4.32 4.27 2.85 2.82 2.83

4.14 4.05 4.00 2.63 2.61 2.61

3.90 3.82 3.77 2.44 2.42 2.43

3.69 3.61 3.56 2.29 2.26 2.26

3.51 3.43 3.38 2.14 2.12 2.12

3.36 3.28 3.23 2.01 2.00 2.00

3.21 3.14 3.09 1.90 1.89 1.89

表 11-2 不同温度下单片机的低电压检测门槛电压(单位: V )

Page 17: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 17/75

例如,当用户使用 5V 单片机时,可以根据单片机的实际工频率,在 STC-ISP 编程中选择表 11-2 中所列出的低电压检测门槛电压作为复位门槛电压。如:常温下工作频率是 20MHz 以上时,可以选择 4.32V 电压作为复位门槛电压;常温下工作频率是 12MHz 以下时,可以选择 3.82V 电压作为复位门槛电压。

Page 18: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 18/75

复位门槛电压的选择如图 11-1 所示。

选择复位门槛电压

图 11-1 复位门槛电压的选择

Page 19: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 19/75

如果在 STC-ISP 下载用户应用程序时,不将低电压检测设置为低电压检测复位,则在用户程序中用户可将低电压检测设置为低电压检测中断。当电源电压 VCC 低于内部低电压检测( LVD )门槛电压时,低电压检测中断请求标志位( LVDF/PCON.5 )就会被硬件置位。如果 ELVD/IE.6 (低电压检测中断允许位)设置为 1 ,低电压检测中断请求标志位就能产生一个低电压检测中断。建议在电压偏低时,不要操作 EEPROM/IAP ,编程时直接选择“低压禁止 IAP 操作”。

Page 20: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 20/75

6 、看门狗复位( 1 )看门狗定时器复位

在工业控制、汽车电子、航空航天等需要高可靠性的系统中,为了防止系统在异常情况下受到干扰, CPU 程序跑飞,导致系统长时间异常 工 作 ,往往需 要 在 系 统 中 使 用 看 门 狗(Watch Dog )电路。

Page 21: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 21/75

看门狗电路的基本作用就是监视 CPU 的工作。如果 CPU 在规定的时间内没有按要求访问看门狗,就认为 CPU 处于异常状态,看门狗就会强迫 CPU 复位,使系统重新从头开始按规律执行用户程序。正常工作时,单片机可以通过一个 I/O 引脚定时向看门狗脉冲输入端输入脉冲(脉冲宽度只要不超出看门狗电路的溢出时间即可)。当系统死机时,单片机就会停止向看门狗脉冲输入端输入脉冲,超过一定时间后,看门狗电路就会发出复位信号,将系统复位,使系统恢复正常工作。

Page 22: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 22/75

STC15F2K60S2 单片机内部集成了看门狗定时器( Watch Dog Timer,WDT ),使单片机系统可靠性设计变得更加方便、简洁。通 过 设 置 和 使 用 WDT 控 制 寄 存 器WDT_CONTR ( 地 址 为 C1H , 复 位 值 为xx00 0000B )来使用看门狗功能。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0

Page 23: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 23/75

1)WDT_FLAG :看门狗溢出标志位,溢出时该位由硬件置 1

可用软件将其清 0

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0

Page 24: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 24/75

2) EN_WDT :看门狗允许位该位当设置为“ 1” 时,看门狗启动。

3) CLR_WDT :看门狗清零位 当设为“ 1” 时,看门狗将重新计数。硬件将自动清 0 此位。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0

Page 25: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 25/75

4) IDLE_WDT :看门狗“ IDLE” 模式(即空闲模式)位

当设置为“ 1” 时, WDT 在“空闲模式”计数;当清 0该位时, WDT 在“空闲模式”时不计数。

5) PS2、 PS1、 PS0:WDT预分频系数控制位。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0

Page 26: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 26/75

WDT溢出时间的计算方法:

WDT 的溢出时间 =( 12 × 预分频系数 × 32768 ) / 时钟频率

例如,时钟为 12MHz 时WDT 的溢出时间=( 12 × 预分频系数 × 32768) / 12000000

= 预分频系数 × 393216 / 12000000

Page 27: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 27/75

常见的预分频系数设置和 WDT溢出时间如表11-3 所示。

图 10-6 LED 动态显示接口电路

PS2 PS1 PS0预分频

系数WDT 溢出时间

(20MHz)WDT 溢出时间

(12MHz)WDT 溢出时间 (11.0592MHz)

0 0 0 2 39.3ms 65.5ms 71.1ms

0 0 1 4 78.6 ms 131.0 ms 142.2 ms

0 1 0 8 157.3 ms 262.1 ms 284.4 ms

0 1 1 16 314.6 ms 524.2 ms 568.8 ms

1 0 0 32 629.1 ms 1.0485s 1.1377s

1 0 1 64 1.25s 2.0971s 2.2755s

1 1 0 128 2.5s 4.1943s 4.5511s

1 1 1 256 5s 8.3886s 9.1022s

表 11-3 WDT 的预分频和溢出时间

Page 28: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 28/75

使用 ISP 编程用户程序时,可以对看门狗进行设置,如图 11-2 所示。

看 门 狗 功 能设置区

图 11-2 看门狗设置

Page 29: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 29/75

当启用 WDT 后,用户程序必须周期性的复位WDT ,以证明程序正常运行。如果用户程序在一段时间之后不能复位 WDT,WDT 就会溢出,将强制 CPU 自动复位,从而确保程序不会进入死循环,或者执行到无程序代码区。复位 WDT 的方法是重写WDT 控制寄存器的内容。

Page 30: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 30/75

( 2 )看门狗定时器的使用WDT 的使用主要涉及 WDT 控制寄存器的设置以及 WDT 的定期复位。使用 WDT 的汇编语言程序如下:

Page 31: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 31/75

$INCLUDE (STC15.INC) ;包含 STC15F2K60S2 单片机寄存器定义文件ORG 0000HLJMP Initial… ; 其他入口定义ORG 0060H

Initial:MOV WDT_CONTR,#00111100B ;WDT 控制寄存器初始化;EN_WDT=1,CLR_WDT=1,IDLE_WDT=1,PS2=1,PS1=0,PS0=0… ; 其他初始化代码

Main_Loop: LCALL Display ;调用显示子程序LCALL Keyboard ;调用键盘扫描子程序… ; 其他程序代码MOV WDT_CONTR,#00111100B ; 复位 WDT… ; 其他代码LJMP Main_Loop

Page 32: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 32/75

使用 WDT的 C语言程序如下:#include “stc15.h”void main(void) { … // 其他初始化代码 WDT_CONTR=0x3c;//EN_WDT=1,CLR_WDT=1,IDLE_WDT= 1,PS2=1,PS1=0,PS0=0 while(1) { display(); keyboard(); … // 其他代码 WDT_CONTR=0x3c; // 复位 WDT } }

Page 33: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 33/75

§11.2 单片机的时钟一、时钟源选择

STC15F2K60S2 单片机除了可以使用传统的外部时钟外,还可以选择内部 R/C振荡器时钟源(内部时钟)。出厂标准配置是使用芯片内部的 R/C振荡器。振荡频率可选, -40 ~85℃ ℃ 时的温飘 ±1% ,常温下温飘可达 5‰ 。如果使用内部时钟,则可以省掉外部晶振。

Page 34: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 34/75

在下载用户程序时,可以在硬件选项中选中调节频率,然后在“选择 / 输入频率”下拉框中选择内部 R/C振荡时钟频率,如图 11-3 所示。

选择内部 R/C 振荡时钟频率

图 11-3 选择时钟源

Page 35: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 35/75

二、内部时钟分频和分频寄存器 如果希望降低系统功耗,可对内部时钟进行分频 。 利 用 时 钟 分 频 控 制 寄 存 器CLK_DIV(PCON2) 可进行主时钟分频,从而降低单片机工作时钟频率,降低功耗,降低EMI 。

Page 36: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 36/75

时钟分频寄存器 CLK_DIV ( 也称为 PCON2 ,地址为 97H ,复位值为 0000 x000B) 各位的定义如下:

位号 00 D7 D6 D5 D4 D3 D2 D1 D0

位名称 MCKO_S1 MCKO_S0 ADRJ Tx_Rx - CLKS2 CLKS1 CLKS0

Page 37: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 37/75

其中 CLKS2、 CLKS1和 CLKS0 用于设置分频系数,如表 11-4 所示。

位号 00 D7 D6 D5 D4 D3 D2 D1 D0

位名称 MCKO_S1 MCKO_S0 ADRJ Tx_Rx - CLKS2 CLKS1 CLKS0

CLKS2 CLKS1 CLKS0 分频后 CPU的实际工作时钟(称为系统时钟)0 0 0 主时钟频率 /1,不分频0 0 1 主时钟频率 /2

0 1 0 主时钟频率 /4

0 1 1 主时钟频率 /8

1 0 0 主时钟频率 /16

1 0 1 主时钟频率 /32

1 1 0 主时钟频率 /64

1 1 1 主时钟频率 /128

表 11-4 分频系数选择

Page 38: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 38/75

STC15F2K60S2 单片机的时钟结构如图 11-4所示。

不分频

÷2

÷4

÷8

÷16

÷32

÷64

÷128

000

001

010

011

100

101

110

111

CLKS2,CLKS1,CLKS0

主时钟系统时钟(SYSclk)

(至单片机及其外围设备)

图 11-4 STC15F2K60S2 单片机的时钟结构

Page 39: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 39/75

§11.3 单片机的电源检测与控制一、单片机的低电压检测 1 、低电压检测相关的寄存器

电源控制寄存器 PCON的 LVDF( PCON.5 )位是低电压检测标志位,同时也是低电压检测中断请求标志位。在正常工作和空闲工作状态时,如果内部工作电压Vcc 低于低电压检测门槛电压,该位自动置 1 ,与低电压检测中断是否被允许无关。即在内部工作电压Vcc 低于低电压检测门槛电压时,不管有没有允许低电压检测中断,该位都自动为 1 。该位要用软件清 0 ,清 0 后,如果内部工作电压 Vcc继续低于低电压检测门槛电压,该位又被自动设置为 1 。

Page 40: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 40/75

在进入掉电工作状态前,如果低电压检测电路未被允许可产生中断,则在进入掉电模式后,该低电压检测电路不工作以降低功耗。如果被允许可产生低电压检测中断,则在进入掉电模式后,该低电压检测电路继续工作,在内部工作电压 Vcc 低于低电压检测门槛电压后,产生低电压检测中断,可将 MCU 从掉电状态唤醒。

Page 41: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 41/75

中断控制允许位是 EA 和 ELVD , ELVD 是低电压检测中断允许位。

ELVD = 0 时,禁止低电压检测中断;ELVD = 1 时,允许低电压检测中断。

中断优先级控制位是 PLVD ,具有两级中断优先级。中断请求标志位是 LVDF ,要由软件清 0 。如果要求在掉电模式下外部低压检测中断继续工作,可将 CPU 从掉电模式唤醒,则应将外部中断使能和时钟输出寄存器 INT_CLKO的LVD_WAKE ( INT_CLKO.3 )位设置为 1 。

Page 42: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 42/75

2 、低电压检测的应用下面以一个具体实例,说明外部低电压检测功能的应用。

【例 11-1】编程实现外部低电压检测功能的应用。解: CPU 可以用查询方式查询 LVDF 标志位,推荐使

用中断方式。在中断服务程序中,将 LVDF 位清 0 ,再读 LVDF 位。如果为 0 ,则认为是电源抖动,如果为 1 ,则认为电源掉电,立即进行保存现场数据的工作。保存现场完成后,再将 LVDF 位清 0 ,再读LVDF 位的值。如果为 0 ,则认为电源系统恢复正常,此 时 CPU 可恢复 正 常 工 作 , 如 果 为 1 ,继续将LVDF 位清 0 ,再读 LVDF 的值,用此方法,等到电源恢复正常,或电源彻底掉电, CPU 进入复位状态。

Page 43: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 43/75

下面用查询方式演示外部低电压检测功能的应用(各个口线对应的发光二极管在该口线为低电平时亮)。中断方式的使用方法,请读者自行设计。

$INCLUDE (STC15.INC)

;包含 STC15F2K60S2 单片机寄存器定义文件RUN_LED EQU P1.0 ; 程序工作指示灯ERROR_LED EQU P1.1 ; 出错指示灯Hi_Volt_LED EQU P1.2 ; 正常电压指示灯POWER_ON_LED EQU P1.3 ; 电源上电指示灯LOW_Volt_LED EQU P1.4 ; 低电压指示灯

Page 44: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 44/75

ORG 0000HLJMP MAINORG 0100H

MAIN:MOV SP, #70H ;堆栈指针指向 70H 单元SETB RUN_LED ;演示程序开始工作LCALL Delay ; 延时CLR RUN_LED ;演示程序开始工作LCALL Delay ; 延时SETB RUN_LED

MAIN1:MOV A,PCONJBC ACC.5,POWER_ON_1CLR ERROR_LEDSETB POWER_ON_LEDSETB Hi_Volt_LEDSETB LOW_Volt_LED

ERROR:LJMP ERROR

Page 45: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 45/75

POWER_ON_1:SETB ERROR_LEDCLR POWER_ON_LEDSETB Hi_Volt_LEDSETB LOW_Volt_LEDLCALL Delay ; 延时

Continue_Read:MOV A,#11011111BANL PCON, ANOPMOV A,PCONJBC ACC.5,Low_Voltage

High_Voltage:SETB ERROR_LEDSETB POWER_ON_LEDCLR Hi_Volt_LEDSETB LOW_Volt_LEDLJMP Continue_Read

Page 46: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 46/75

Low_Voltage:SETB ERROR_LEDSETB POWER_ON_LEDSETB Hi_Volt_LEDCLR LOW_Volt_LEDLJMP Continue_Read

Delay: CLR A MOV R0, A MOV R1, A MOV R2, #30H

Delay_Loop: DJNZ R0, Delay_Loop DJNZ R1, Delay_Loop DJNZ R2, Delay_Loop RET END

Page 47: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 47/75

二、省电方式 STC15F2K60S2 单片机可以运行 3 种省电模式以降低功耗

低速模式空闲模式掉电模式

正常工作模式下, STC15F2K60S2 单片机的典型功耗是 2.7mA~7mA ,而掉电模式下的典型功耗<0.1uA ,空闲模式下的典型功耗是 1.8mA 。

Page 48: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 48/75

1 、省电方式的控制低 速 模 式 由 时 钟 分 频 器CLK_DIV( PCON2 )控制,而空闲模式和掉电模式的进入由电源控制寄存器PCON 的相应位控制。

Page 49: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 49/75

PCON (地址为 87H ,复位值为 30H )寄存器的各位定义如下:

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 50: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 50/75

1) LVDF :低电压检测标志位,同时也是低电压检测中断请求标志位。

2) POF :上电复位标志位,单片机停电后,上电复位标志位为 1 ,可由软件清 0 。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 51: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 51/75

在实际应用中,该位可用来判断单片机复位是上电复位 (冷启动),还是外部复位脚输入复位信号产生的复位,还是内部看门狗复位,或者是软件复位或其他复位。用户可以在初始化程序中判断 POF 位是否为 1 ,并对不同情况进行不同的处理。判断方法如图 11-5 所示。

ÀäÆô¶¯£¨Éϵ縴룩ÍⲿÊÖ¶¯¸´Î»

»ò¿´ÃŹ·¸´Î»£¬»òÈí¼þ¸´Î»£¬

»òÆäËû¸´Î»

Y

NPOF=1£¿

½«POFÇåÁã 图 11-5 判断复位种类流程图

Page 52: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 52/75

3) PD :将其置 1 时,单片机将进入掉电模式。掉电模式也叫停机模式,此时的典型功耗为 2μA 。进入掉电模式后,内部时钟停振, CPU 、定时器、看门狗、 A/D转换、串行口全部停止工作,只有外部中断继续工作。如果低电压检测电路被允许产生中断,则低电压检测电路也可继续工作,否则将停止工作。进入掉电模式后,所有的 I/O 口、特殊功能寄存器维持进入掉电模式前那一刻的状态不变。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 53: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 53/75

进入掉电模式的单片机可由外部中断唤醒。可将 CPU 从掉电模式唤醒的资源有: INT0/P3.2, INT1/P3.3, INT2/P3.6、 /INT3/P3.7、/INT4/P3.0, CCP0/CCP1/CCP2, RxD/RxD2,T0/T1/T2 和内部低功耗掉电唤醒专用定时器。STC15F2K60S2 单片机进入停机模式 / 掉电模式后,除了可以通过外部中断源进行唤醒外,使用掉电唤醒专用定时器,也可以将进入掉电模式后的单片机唤醒,使其恢复到正常工作状态。

Page 54: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 54/75

掉电唤醒专用定时器由特殊功能寄存器 WKTCH 和 WKTCL 进行管理和控制。WKTCL (地址为 AAH ,复位值为 00H )各位的定义如下:

WKTCH (地址为 ABH ,复位值为 00H )各位的定义如下:

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 WKTEN

Page 55: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 55/75

掉电唤醒专用定时器是一个 15 位定时器,{WKTCH[6:0] , WKTCL[7:0]} 构成最长 15位计数值( 32768 ),定时从 0 开始计数。

WKTEN :掉电唤醒专用定时器的使能控制位。1 :允许掉电唤醒专用定时器工作;0 :禁止掉电唤醒专用定时器工作。

Page 56: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 56/75

通过软件将 WKTCH 寄存器中的 WKTEN 位置‘ 1’ ,允许掉电唤醒专用定时器工作后,当MCU 一旦进入掉电模式,掉电唤醒专用定时器就开始计数,直到计数到与 {WKTCH[6:0],WKTCL[7:0]} 寄存器所设定的计数值相等后就启 动 系 统 振 荡 器 , MCU 等 待32768/16384/8192/4096 个时钟(由用户在 ISP烧录程序时自行设置)后, MCU认为此时系统时钟从开始起振的不稳定状态已经过渡到稳定状态,才将时钟供给 CPU, CPU获得时钟后,程序从上次掉电的地方继续往下执行。

Page 57: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 57/75

电唤醒专用定时器计数一次的时间约为 488μs ,当然存在一定的误差。掉电唤醒专用定时器的计数时间为:

488μs×{WKTCH[6:0],WKTCL[7:0]} 寄存器所设定的计数值

因此,掉电唤醒专用定时器最小计数时间约为 488μs

掉电唤醒专用定时器最长计数时间约为 488μs ×32768=15.99s

Page 58: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 58/75

利用掉电唤醒专用定时器唤醒单片机时,只需在 程 序 的 初 始 化 部 分 设 置 WKTCL 和WKTCH 即 可 , 在{WKTCH[6:0] , WKTCL[7:0]} 设 置 计数值 ,注意将 WKTCH 的最高位置 1 ,以允许掉电唤醒专用定时器工作。

Page 59: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 59/75

STC15F2K60S2 单 片 机 除 增 加 了 特 殊 功 能 寄 存 器WKTCL 和WKTCH 以外,还设计了 2 个隐藏的特殊功能寄存器 SL_WKTCL和 SL_WKTCH 来控制内部掉电唤醒专用定时器。

SL_WKTCL与WKTCL共用同一个地址SL_WKTCH与WKTCH共用同一个地址SL_WKTCL和 SL_WKTCH 是隐藏的,对用户不可见。用户对 WKTCL和WKTCH写入的内容同时也会写入SL_WKTCL和 SL_WKTCH 中。当外部中断提前将单片机从停机模式唤醒时,通过读WKTCL和WKTCH的内容 ( 实际是读 SL_WKTCL 和 SL_WKTCH 中的内容 ) ,可以读出单片机在停机模式 / 掉电模式等待的时间。

Page 60: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 60/75

4)IDL :将其置 1 时,单片机将进入空闲模式(即 IDLE 模式)

在空闲模式下,仅 CPU无时钟,停止工作。外部中断、内部低电压检测电路、定时器、 A/D转换等其余模块仍正常运行。而看门狗在空闲模式下是否工作取决于其自身有一个“ IDLE” 模式位: IDLE_WDT(WDT_CONTR.3) 。当 IDLE_WDT 位被设置为“ 1” 时,看门狗定时器在“空闲模式”计数,即正常工作。当 IDLE_WDT 位被清“ 0” 时,看门狗定时器在“空闲模式”时不计数,即停止工作。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 61: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 61/75

在空闲模式下, RAM 、堆栈指针( SP )、程序计数器( PC )、程序状态字( PSW )、累加器( A )等寄存器都保持原有数据。 I/O 口保持着空闲模式被激活前那一刻的逻辑状态。空闲模式下单片机的所有外围设备都能正常运行(除 CPU无时钟不工作外)。当任何一个中断产生时,它们都可以将单片机唤醒,单片机被唤醒后, CPU 将继续执行进入空闲模式语句的下一条指令。

Page 62: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 62/75

有两种方式可以退出空闲模式外部中断、定时器中断、低电压检测中断以及A/D转换中断中的任何一个中断的产生都会引起 IDL/PCON.0 被硬件清除,从而退出空闲模式。外部 RST 引脚复位,将复位脚拉高,产生复位。这种拉高复位引脚来产生复位的信号源需要被保持 24 个时钟加上 20us ,才能产生复位,再将 RST 引脚拉低,结束复位,单片机从用户程序的 0000H 处开始正常工作。

Page 63: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 63/75

5)GF1和 GF0 是通用用户标志 1和 0 ,用户可以任意使用。

6)SMOD和 SMOD0 :与电源控制无关,与串口有关,在此不作介绍。

位号 D7 D6 D5 D4 D3 D2 D1 D0

位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

Page 64: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 64/75

2 、省电方式的应用省电方式的应用主要涉及到省电方式的进入(设置 PCON )和省电方式的退出(唤醒)两个方面。下面举例说明程序的设计方法。【例 11-2 】 设计程序,利用外部中断实现单片

机从掉电模式唤醒。

Page 65: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 65/75

#include “stc15.h”#include “intrins.h”sbit Begin_Led = P1^2; // 系统开始工作指示灯 unsigned char Is_Power_Down=0; //判断是否进入掉电模式标志sbit Is_Power_Down_Led_INT0=P1^7;// 掉电唤醒指示,在 INT0 中sbit Not_Power_Down_Led_INT0=P1^6;//非掉电唤醒指示,在 INT0 中sbit Is_Power_Down_Led_INT1=P1^5;// 掉电唤醒指示,在 INT1 中sbit Not_Power_Down_Led_INT1=P1^4;//非掉电唤醒指示,在 INT1 中sbit Power_Down_Wakeup_Pin_INT0 = P3^2; // 掉电唤醒管脚, INT0sbit Power_Down_Wakeup_Pin_INT1 = P3^3; // 掉电唤醒管脚, INT1sbit Normal_Work_Flashing_Led= P1^3; // 正常工作状态指示灯void Normal_Work_Flashing(void); void INT_System_init(void);

Page 66: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 66/75

void main(void) { unsigned char j=0; unsigned char wakeup_counter = 0;// 中断唤醒次数变量初始为 0 Begin_Led = 0; // 系统开始工作指示灯 INT_System_init(); // 中断系统初始化 while(1) { P2 = ~wakeup_counter; // 中断唤醒次数显示 ,先将 wakeup_counter取反 wakeup_counter++; // 中断唤醒次数修正 for(j=0;j<2;j++)

Normal_Work_Flashing(); // 系统正常工作指示灯 Is_Power_Down = 1; // 进入掉电模式之前,将其置 1 ,以供判断 PCON=0x02;// 执行完此句,单片机进入掉电模式,外部时钟停止振荡 _nop_(); // 外部中断唤醒后,先执行该语句,然后进入中断服务程序 _nop_(); //建议多加几个空操作指令 NOP ,以便观察 }} 图 10-16 单片机从 CH451 获得按键代码的过程

Page 67: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 67/75

void INT_System_init(void) // 中断系统初始化{ IT0 = 0; // 外部中断 0 ,上升沿和下降沿都可触发中断 EX0 = 1; // 允许外部中断 0 中断 IT1 = 1; // 外部中断 1 ,下降沿触发中断 EX1 = 1; // 允许外部中断 1 中断 EA = 1; // 开总中断控制位}

Page 68: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 68/75

void INT0_ISR(void) interrupt 0 // 外部中断 0服务程序{ if(Is_Power_Down) //判断掉电唤醒标志 { Is_Power_Down = 0; Is_Power_Down_Led_INT0=0;//点亮外部中断 0 掉电唤醒指示灯 while(Power_Down_Wakeup_Pin_INT0==0); //等待变高 Is_Power_Down_Led_INT0=1; //关闭外部中断 0 掉电唤醒指示灯 } else { Not_Power_Down_Led_INT0=0;//点亮 INT0 正常工作中断指示灯 while(Power_Down_Wakeup_Pin_INT0==0); //等待变高 Not_Power_Down_Led_INT0=1;//关闭 INT0 正常工作中断指示灯 }}

Page 69: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 69/75

void INT1_ISR(void) interrupt 2 // 外部中断 1服务程序{ if(Is_Power_Down) //判断掉电唤醒标志 { Is_Power_Down = 0; Is_Power_Down_Led_INT1 = 0; //点亮 INT1 掉电唤醒指示灯 while(Power_Down_Wakeup_Pin_INT1==0); //等待变高 Is_Power_Down_Led_INT1 = 1; //关闭 INT1 掉电唤醒指示灯 } else { Not_Power_Down_Led_INT1=0;//点亮 INT1 正常工作中断指示灯 while(Power_Down_Wakeup_Pin_INT1==0); //等待变高 Not_Power_Down_Led_INT1=1;//关闭 INT1 正常工作中断指示灯 }}

Page 70: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 70/75

void delay(void){ unsigned int j,k; for(k=0;k<2;++k) { for(j=0;j<=30000;++j) {

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } }}

Page 71: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 71/75

void Normal_Work_Flashing(void)

{

Normal_Work_Flashing_Led = 0;

delay();

Normal_Work_Flashing_Led = 1;

delay();

}

Page 72: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 72/75

【例 11-3 】 设计程序,利用外部中断实现单片机从掉电模式唤醒。

解:汇编语言程序如下: $INCLUDE (STC15.INC) ;包含 STC15F2K60S2 单片机寄存器定义文件

ORG 0000HLJMP MAINORG 0003HLJMPINT0_ISRORG 0013HLJMP INT1_ISR

Page 73: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 73/75

ORG 0100HMAIN:

MOV SP,#70HMOV R3, #0 ;P1 LED递增方式变化 , 表示程序开始运行MAIN_LOOP:MOV A, R3CPL AMOV P1, ALCALL DELAYINC R3MOV A, R3 SUBB A, #18H JC MAIN_LOOPMOV P1, #0FFH ;全部指示灯熄灭,表示进入掉电模式状态CLR IT0 ; 设置上升沿和下降沿都可以激活外部中断 0 SETB EX0 ; 允许外部中断 0CLR IT1 ; 设置上升沿和下降沿都可以激活外部中断 1SETB EX1 ; 允许外部中断 1 SETB EA ; 开中断 , 若不开中断,则不能从掉电模式中唤醒

Page 74: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 74/75

; 下条语句将使 CPU 进入空闲状态或掉电状态; 外部中断可以将 CPU 从掉电状态中唤醒,方法为 : 将外部中断脚拉

低MOV PCON,#00000010B ;令 PD=1, 进入掉电状态MOV P1, #0DFH ;1101,1111B 请注意 : ;1. 外部中断使 MCU退出掉电状态 , 执行本条指令后响应中断 ; 表现为 P1.5与 P1.7 的 LED 同时亮 (INT0唤醒 ) ;2. 外部中断使 MCU退出 idle 状态 ,先响应中断然后再执行本条指令 ,

; 表现为 P1.7 的 LED先亮 (INT0唤醒 ),P1.5 的 LED 后亮 ; 3. 实际使用掉电模式时 , 本语句应用 NOP 代替 NOP ; 实际使用掉电模式时 , 应在 PCON赋值语句后多加几个 NOPSJMP $ ;循环 , 停机

Page 75: 第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的时钟 掌握单片机的电源检测与控制

22:02:56 75/75

INT0_ISR: ; 外部中断 0服务程序CLR P1.7 ;点亮 P1.7 LED 表示已响应 INT0 中断LCALL DELAY ; 延时是为了便于观察 , 实际应用不需延时RETI

INT1_ISR: ; 外部中断 1服务程序CLR P1.6 ;点亮 P1.6 LED 表示已响应 INT1 中断LCALL DELAY ; 延时是为了便于观察 , 实际应用不需延时RETI

DELAY: MOV R0, #0 MOV R1, #0 MOV R2, #02

DELAY_LOOP:DJNZ R0, DELAY_LOOPDJNZ R1, DELAY_LOOPDJNZ R2, DELAY_LOOPRETEND