Download presentation
Presentation is loading. Please wait.
1
第十一章 复位、时钟和省电方式控制
2
任课教师:刘忠国 山东大学课程中心网站: 宏晶官方网站: STC单片机编译(汇编)/编程(烧录)/仿真工具说 明书; stc15系列单片机器件手册等 keil μvision软件下载及指导手册(Help→μvision Help) Keil Software –Cx51 编译器用户手册: Cx51编译 器--对传统和扩展的8051微处理器的优化的C 编译器和库参考
3
第十一章 复位、时钟和省电方式控制 本章学习目标 掌握单片机的复位和时钟 掌握单片机的电源检测与控制
正确复位和合适时钟是单片机正常工作的基础, 而 单片机的省电方式控制可以降低系统的功耗, 从而 实现低功耗设计。
4
§11.1 复位 复位就是单片机的初始化工作,复位后中 央处理器(CPU)及单片机内的其他功能 部件都处在一个确定的初始状态,并从这 个状态开始工作。 复位分为热启动复位和冷启动复位两种, 它们的区别如表11-1所示。
5
(热启动复位)取决于复位前SWBS/IAP_CONTR.6 的值为1还是为0
表11-1 热启动复位和冷启动复位 复位类 复位源 复位现象 热启动复位 内部看门狗复位 单片机从用户程序区0000H处开始执行用户程序(复位前SWBS=0) 通过控制RESET引脚产生的硬复位 从ISP监控程序区开始执行, 检测不到ISP下载流后, 或检测到ISP下载流并下载完后, 均会从用户应用程序区执行 通过对IAP_CONTR寄存器送入20H产生的软复位 从用户程序区0000H处开始直接执行用户程序 (SWBS=0) 通过对IAP_CONTR寄存器送入60H产生的软复位 从系统ISP监控程序区开始执行程序,如果检测不到合法的ISP下载命令流, 将软复位到用户程序区执行用户程序(复位前SWBS=0) 内部低电压检测复位 程序地址非法复位 冷启动复位 系统停电后再上电引起的硬复位 从系统ISP监控程序区开始执行程序, 如果检测不到合法的ISP下载命令流,将软复位到用户程序区执行用户程序 MAX810专用复位电路复位
6
STC15F2K60S2单片机有6种复位方式 外部RST引脚复位 软件复位 内部低电压检测复位 看门狗复位
掉电复位/上电复位(并可选择增加额外的复位延 时180ms,也叫MAX810专用复位电路,其实就 是在上电复位后增加一个180ms复位延时) MAX810专用复位电路复位 及程序地址非法复位。(第7种)
7
1、外部RST引脚复位 外部RST引脚复位就是从外部向P5.4/RST引脚施加一定宽 度的复位脉冲,从而实现单片机的复位。
P5.4/RST引脚出厂时被配置为I/O口, 要将其配置为复位功 能,可在使用ISP下载程序时设置。 若P5.4/RST脚已在ISP烧录程序时被设为复位脚, 那P5.4 /RST就是芯片复位的输入脚。 将RST复位脚拉高并维持至少24个时钟加20us后, 单片机会 进入复位状态; 将RST复位脚拉回低电平后, 单片机结束复 位状态并会将IAP_CONTR中的SWBS位置1, 同时会使系统 从系统ISP监控程序区开始执行程序, 检测不到合法的ISP下 载命令流后, 或检测到合法的ISP下载命令流并下载完用户 程序后, 均会软复位到用户应用程序区执行用户程序。
8
2、软件复位 在系统运行过程中,有时会根据特殊需求,需要实 现单片机系统软复位(热启动之一),传统的8051 单片机由于硬件上未支持此功能,用户必须用软件 模拟实现,实现起来较麻烦。 STC15F2K60S2单片机利用ISP/IAP控制寄存器 IAP_CONTR (地址为C7H, 复位值为0000 x000B)实 现了此功能。 用户只需简单的控制IAP_CONTR的其中两位SWBS /SWRST就可以系统复位了。
9
2、软件复位 ISP/IAP控制寄存器IAP_CONTR的各位定义如下: 1)SWRST:产生软件复位的控制位。
位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 IAPEN SWBS SWRST CMD_FAIL - WT2 WT1 WT0 1)SWRST:产生软件复位的控制位。 1 :产生软件系统复位,硬件自动清0 0:不操作 2)SWBS: 要与SWRST配合才可以实现如下复位: 软件复位后选择从用户应用程序区启动(0) 复位后从 ISP程序区启动(1)
10
2、软件复位 下面描述中, 用户应用程序区简称AP区, 系统ISP监控 程序区简称ISP区。
位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 IAPEN SWBS SWRST CMD_FAIL - WT2 WT1 WT0 2、软件复位 下面描述中, 用户应用程序区简称AP区, 系统ISP监控 程序区简称ISP区。 例如, 从AP区软件复位并切换到AP区开始执行程序的 IAP_CONTR设置代码为: MOV IAP_CONTR, # B ;SWBS=0(复位后从AP区启动),SWRST=1(产生软复 位) 从ISP区软件复位并切换到AP区开始执行程序的 IAP_CONTR设置代码为: ;SWBS=0(复位后从AP区启动),SWRST=1(产生软 复位)
11
从AP区软件复位并切换到ISP区开始执行程序的 IAP_CONTR设置代码为: MOV IAP_CONTR,#01100000B
位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 IAPEN SWBS SWRST CMD_FAIL - WT2 WT1 WT0 2、软件复位 从AP区软件复位并切换到ISP区开始执行程序的 IAP_CONTR设置代码为: MOV IAP_CONTR,# B ;SWBS=1(复位后从ISP区启动), SWRST=1(软复位) 从ISP区软件复位并切换到ISP区开始执行程序的 IAP_CONTR设置代码为: 3)CMD_FAIL 如果送了ISP/IAP命令, 并对IAP_TRIG送5AH/A5H 触发失败,则为1,需要由软件清0。
12
3、掉电复位/上电复位 当电源电压VCC低于掉电复位/上电复位检测门槛电压 时, 所有的逻辑电路都会复位。
若MAX810专用复位电路在STC-ISP编程器中被允许, 则以后掉电复位/上电复位后将再产生约180ms复位延 时, 复位才能被解除。 4、MAX810专用复位电路复 位 STC15F2K60S2内部集成 了MAX810专用复位电路。
13
5、内部低压检测复位 除了上电复位检测门槛电压外,STC15F2K60S2单片机 还有一组更可靠的内部低电压检测(LVD)门槛电压。
当电源电压VCC低于内部低电压检测门槛电压时, 可产 生复位(前提是在STC-ISP下载/编程用户程序时, 允许 低电压检测复位, 即将低电压检测门槛电压设置为复位 门槛电压)。 STC15F2K60S2单片机 内置了8级可选的内部 低电压检测门槛电压。 选择复位门槛电压
14
表11-2 不同温度下单片机的低电压检测门槛电压(单位: V)
5、内部低压检测复位 STC15F2K60S2内置8级可选内部低电压检测门槛电压。 表11-2 不同温度下单片机的低电压检测门槛电压(单位: V) 5V单片机的低电压检测门槛电压 -40℃ 25℃ 85℃ 4.74 4.64 4.60 4.41 4.32 4.27 4.14 4.05 4.00 3.90 3.82 3.77 3.69 3.61 3.56 3.51 3.43 3.38 3.36 3.28 3.23 3.21 3.14 3.09 3V单片机的低电压检测门槛电压 -40℃ 25℃ 85℃ 3.11 3.08 3.09 2.85 2.82 2.83 2.63 2.61 2.44 2.42 2.43 2.29 2.26 2.14 2.12 2.01 2.00 1.90 1.89
15
5、内部低压检测复位 若在STC-ISP下载用户应用程序时, 不将低电压检测 设置为低电压检测复位, 则在用户程序中可将低电压 检测设置为低电压检测中断。 当电源电压VCC低于内部低电压检测(LVD)门槛电压 时, 低电压检测中断请求标志位(LVDF/PCON.5)就被 硬件置位。 若ELVD/IE.6 (低电压检测中断允许位)设置为1, 低电 压检测中断请求标志位就能产生低电压检测中断。 建议在电压偏低时, 不要操作EEPROM/IAP, 编程时 直接选择“低压禁止IAP操作”。
16
6、看门狗复位 (1)看门狗定时器复位 在工业控制、汽车电子、航空航天等需高可靠性 的系统中, 为防止系统在异常情况下受到干扰, CPU程序跑飞, 导致系统长时间异常工作, 往往需 在系统中使用看门狗(Watch Dog)电路。 看门狗电路的基本作用就是监视CPU的工作。如 果CPU在规定的时间内没有按要求访问看门狗, 就 认为CPU处于异常状态, 看门狗就会强迫CPU复位, 使系统重新从头开始按规律执行用户程序。
17
6、看门狗复位 正常工作时,单片机可通过一个I/O引脚定时向看 门狗脉冲输入端输入脉冲(脉冲宽度只要不超出 看门狗电路的溢出时间即可)。
当系统死机时, 单片机就会停止向看门狗脉冲输入 端输入脉冲, 超过一定时间后, 看门狗电路就会发 出复位信号, 将系统复位, 使系统恢复正常工作。 STC15F2K60S2单片机内部集成了看门狗定时器 (Watch Dog Timer, WDT), 使单片机系统可靠性设 计变得更加方便、简洁。
18
6、看门狗复位 通过设置和使用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 1)WDT_FLAG:看门狗溢出标志位,溢出时 该位由硬件置1 可用软件将其清0 2)EN_WDT:看门狗允许位 当设置为“1”时,看门狗启动。
19
4) IDLE_WDT: 看门狗 “IDLE” 模式(即空闲模式)位 当设置为“1” 时, WDT在“空闲模式” 计数;
WDT控制寄存器WDT_CONTR 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 3) CLR_WDT: 看门狗清零位 当设为 “1”时,看门狗将重新计数。 硬件将自动清0此位。 4) IDLE_WDT: 看门狗 “IDLE” 模式(即空闲模式)位 当设置为“1” 时, WDT在“空闲模式” 计数; 当清0该位时, WDT在“空闲模式” 时不计数。 5) PS2、PS1、PS0: WDT预分频系数控制位。
20
6、看门狗复位 WDT溢出时间的计算方法: WDT的溢出时间 =(12×预分频系数×32768 )/时钟频率 例如,时钟为12MHz时
= (12×预分频系数× 32768) / = 预分频系数× / PS2 PS1 PS0 预分频 系数 2 1 4 8 16 32 64 128 256
21
6、看门狗复位 常见预分频系数设置和WDT溢出时间如表11-3所示。 表11-3 WDT的预分频和溢出时间 PS2 PS1 PS0 预分频
(20MHz) (12MHz) WDT溢出时间 ( MHz) 2 39.3ms 65.5ms 71.1ms 1 4 78.6 ms 131.0 ms 142.2 ms 8 157.3 ms 262.1 ms 284.4 ms 16 314.6 ms 524.2 ms 568.8 ms 32 629.1 ms 1.0485s 1.1377s 64 1.25s 2.0971s 2.2755s 128 2.5s 4.1943s 4.5511s 256 5s 8.3886s 9.1022s
22
6、看门狗复位 使用ISP编程用户程序时, 可对看门狗进行设置, 如图 11-2所示。 图11-2 看门狗设置 看门狗功能设置区
23
6、看门狗复位 当启用WDT后,用户程序必须周期性的复位WDT, 以证明程序正常运行。
如果用户程序在一段时间之后不能复位WDT, WDT 就会溢出, 将强制CPU自动复位, 从而确保程序不会 进入死循环, 或者执行到无程序代码区。 复位WDT的方法是重写WDT控制寄存器的内容。 (2)看门狗定时器的使用 WDT的使用主要涉及WDT控制寄存器的设置以及 WDT的定期复位。 使用WDT的汇编语言程序如下:
24
$INCLUDE (STC15.INC) ;包含STC15寄存器定义文件 ORG 0000H LJMP Initial … ;其他入口定义
(2)看门狗定时器的使用——汇编语言程序 $INCLUDE (STC15.INC) ;包含STC15寄存器定义文件 ORG H LJMP Initial … ;其他入口定义 ORG H Initial:MOV WDT_CONTR, # B ;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, # B ;周期性的复位WDT … ;其他代码 LJMP Main_Loop D7 D6 D5 D4 D3 D2 D1 D0 WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 CLR_WDT=1,
25
(2)看门狗定时器的使用——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 }
26
§11.2 单片机的时钟 时钟源选择 STC15F2K60S2单片机除了可使用传统的外部时 钟外,还可以选择内部R/C振荡器时钟源(内部 时钟)。 出厂标准配置是使用芯片内部的R/C振荡器。振 荡频率可选,-40℃~85℃时的温飘±1%,常温下 温飘可达5‰。如果使用内部时钟,则可以省掉 外部晶振。
27
时钟源选择 下载用户程序时,可在硬件选项中选中调节频率, 在“选择/输入 频率” 下拉框中选择内部R/C振荡时钟频率, 如图11-3所示。 选择内部R/C振荡时钟频率
28
内部时钟分频和分频寄存器 如果希望降低系统功耗, 可对内部时钟进行分频。利 用时钟分频控制寄存器CLK_DIV (PCON2) 可进行 主时钟分频, 从而降低单片机工作时钟频率, 降低功 耗, 降低EMI (电磁干扰) 。 时钟分频寄存器CLK_DIV (也称为PCON2, 地址为 97H, 复位值为0000 x000B) 各位的定义如下: 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 MCKO_S1 MCKO_S0 ADRJ Tx_Rx - CLKS2 CLKS1 CLKS0
29
时钟分频寄存器CLK_DIV (PCON2)
表11-4 分频系数选择 位号 D7 D6 D5 D4 D3 D2 D1 D0 名称 MCKO_S1 MCKO_S0 ADRJ Tx_Rx - CLKS2 CLKS1 CLKS0 CLKS2, CLKS1,CLKS0: 设置分频系数,如表11-4所示。 CLKS2 CLKS1 CLKS0 分频后CPU实际工作时钟(系统时钟) 主时钟频率/1,不分频 1 主时钟频率/2 主时钟频率/4 主时钟频率/8 主时钟频率/16 主时钟频率/32 主时钟频率/64 主时钟频率/128
30
STC15F2K60S2单片机的时钟结构如图11-4所示。
31
§11.3 单片机的电源检测与控制 11.3.1 单片机的低电压检测 1、低电压检测相关的寄存器
单片机的低电压检测 1、低电压检测相关的寄存器 电源控制寄存器PCON的LVDF(PCON.5)位是低电压 检测标志位, 同时也是低电压检测中断请求标志位。 在正常工作和空闲工作状态时, 若内部工作电压Vcc 低于低电压检测门槛电压, 该位自动置1, 与低电压检 测中断是否被允许无关。 即在内部工作电压Vcc低于低电压检测门槛电压时, 不管有无允许低电压检测中断, 该位自动为1。 该位要用软件清0, 清0后,若内部工作电压Vcc继续低 于低电压检测门槛电压, 该位又被自动设置为1。
32
11.3.1 单片机的低电压检测 1、低电压检测相关的寄存器
单片机的低电压检测 1、低电压检测相关的寄存器 在进入掉电工作状态前,如果低电压检测电路未被 允许可产生中断,则在进入掉电模式后,该低电压 检测电路不工作以降低功耗。 如果被允许可产生低电压检测中断,则在进入掉电 模式后,该低电压检测电路继续工作,在内部工作 电压Vcc低于低电压检测门槛电压后,产生低电压 检测中断,可将MCU从掉电状态唤醒。
33
1、低电压检测相关的寄存器 中断控制允许位是EA和ELVD,ELVD是低电压检 测中断允许位。 ELVD = 0时,禁止低电压检测中断;
中断优先级控制位是PLVD,具有两级中断优先级。 中断请求标志位是LVDF,要由软件清0。 如果要求在掉电模式下外部低压检测中断继续工作, 可将CPU从掉电模式唤醒,则应将外部中断使能和 时钟输出寄存器INT_CLKO的LVD_WAKE位 (INT_CLKO.3) 设置为1。 INT_CLKO 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 - EX4 EX3 EX2 LVD_WAKE T2CLKO T1CLKO T0CLKO
34
2、低电压检测的应用 下面以一个具体实例, 说明外部低电压检测功能的应用。 【例11-1】编程实现外部低电压检测功能的应用。
解:CPU可用查询方式查询LVDF标志位,推荐使用中断 方式。在中断服务程序中, 将LVDF 位清0, 再读LVDF位。 如果为0, 则认为是电源抖动; 如果为1, 则认为电源掉电, 立即进行保存现场数据的工作。保存现场完成后, 再将 LVDF位清0, 再读LVDF位的值。 如果为0, 则认为电源系统恢复正常, 此时CPU可恢复正 常工作; 如果为1, 继续将LVDF位清0, 再读LVDF的值, 用此方法, 等到电源恢复正常, 或电源彻底掉电, CPU进 入复位状态。
35
【例11-1】编程实现外部低电压检测功能的应用。
下面用查询方式演示外部低电压检测功能的应用(各 个口线对应的发光二极管在该口线为低电平时亮)。 中断方式的使用方法,请读者自行设计。 (下面程序是STC12C5A60S2系列单片机器件手册中的例子) $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 ;低电压指示灯
36
【例11-1】编程实现外部低电压检测功能的应用
ORG 0000H LJMP MAIN ORG 0100H MAIN:MOV SP, #70H ;堆栈指针指向 70H 单元 SETB RUN_LED ;演示程序开始工作 LCALL Delay ;延时 CLR RUN_LED ;演示程序开始工作 SETB RUN_LED ; MAIN1:MOV A, PCON ;读PCON的LVDF标志位 JBC ACC.5, POWER_ON_1 ;上电开机后LVDF=1 CLR ERROR_LED ;出错指示灯亮 SETB POWER_ON_LED SETB Hi_Volt_LED SETB LOW_Volt_LED ERROR: LJMP ERROR ;没能检测出上电时的低电压? 原程序从P1口输出数据0F0H, 0FH, 0FFH ;电源上电指示灯熄灭 ;正常电压指示灯熄灭 ;低电压指示灯熄灭
37
【例11-1】编程实现外部低电压检测功能的应用
;出错指示灯熄灭 POWER_ON_1: SETB ERROR_LED CLR POWER_ON_LED SETB Hi_Volt_LED SETB LOW_Volt_LED LCALL Delay ;延时 Continue_Read: MOV A, # B ANL PCON, A ;将PCON的LVDF标志位清0 NOP MOV A, PCON ;再读PCON的LVDF标志位 JBC ACC.5, Low_Voltage ;LVDF又变1则低电压 High_Voltage: SETB ERROR_LED SETB POWER_ON_LED CLR Hi_Volt_LED SETB LOW_Volt_LED LJMP Continue_Read ;循环查询LVDF标志位 ;电源上电指示灯亮 ;正常电压指示灯熄灭 ;低电压指示灯熄灭 ;出错指示灯熄灭 ;电源上电指示灯熄灭 ;正常电压指示灯亮 ;低电压指示灯熄灭
38
【例11-1】编程实现外部低电压检测功能的应用
Low_Voltage: SETB ERROR_LED SETB POWER_ON_LED SETB Hi_Volt_LED CLR LOW_Volt_LED LJMP Continue_Read ;循环查询LVDF标志位 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 ;出错指示灯熄灭 ;电源上电指示灯熄灭 ;正常电压指示灯熄灭 ;低电压指示灯亮
39
省电方式 STC15F2K60S2单片机可运行3种省电模式以 降低功耗 低速模式 空闲模式 掉电模式 正常工作模式下, STC15F2K60S2单片机的典 型功耗是2.7mA~7mA, 而掉电模式下的典型 功耗<0.1uA, 空闲模式下的典型功耗是1.8mA。
40
1、省电方式的控制 低速模式由时钟分频器CLK_DIV (PCON2)控制, 而 空闲模式和掉电模式的进入由电源控制寄存器PCON 的相应位控制。 PCON(地址为87H, 复位值为30H)寄存器各位定义: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 1)LVDF:低电压检测标志位,同时也是低电压检测 中断请求标志位。 2)POF:上电复位标志位, 单片机停电后, 上电复位 标志位为1, 可由软件清0。
41
1、省电方式的控制 实际应用中, 该位可用来判断单片机复位是上电复位 (冷启动), 还是外部复位脚输入复位信号产生的复位, 还是内部看门狗复位,或是软件复位或其他复位。 用户可在初始化程序中判断POF位是否为1, 并对不 同情况进行不同处理。判断方法如图11-5所示。 图11-5 判断复位种类流程图
42
3) PD:将其置1时,单片机将进入掉电模式。 掉电模式也叫停机模式,此时的典型功耗为2μA。
PCON寄存器各位定义: PD 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 3) PD:将其置1时,单片机将进入掉电模式。 掉电模式也叫停机模式,此时的典型功耗为2μA。 进入掉电模式后, 内部时钟停振, CPU, 定时器, 看门狗, A/D转换, 串行口全部停止工作, 只有外部中断继续工作。 若低电压检测电路被允许产生中断(ELVD), 则低电压 检测电路也可继续工作, 否则将停止工作。 进入掉电模式后, 所有的I/O口、特殊功能寄存器维持 进入掉电模式前那一刻状态不变。
43
PCON. PD: 置1时, 单片机进入掉电模式 进入掉电模式的单片机可由外部中断唤醒。 可将CPU从掉电模式唤醒的外部管脚(除ADC,SPI)有: INT0/P3.2, INT1/P3.3, /INT2/P3.6, /INT3/P3.7, /INT4/P3.0, CCP0/CCP1/CCP2, RxD/RxD2, T0/T1/T2和内部低功耗掉电唤醒专用定时器。 STC15F2K60S2单片机进入停机模式/掉电模式后, 除 了可以通过外部中断源进行唤醒外, 用掉电唤醒专用 定时器, 也可将进入掉电模式后的单片机唤醒, 使其 恢复到正常工作状态。
44
掉电唤醒专用定时器: WKTCH, WKTCL
WKTCL(地址为AAH, 复位值为00H)各位定义如下: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 WKTCH(地址为ABH,复位值为00H)各位定义如下: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 WKTEN
45
掉电唤醒专用定时器: WKTCH, WKTCL
位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 WKTCH: 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 WKTEN WKTEN:掉电唤醒专用定时器的使能控制位。 1:允许掉电唤醒专用定时器工作; 0:禁止掉电唤醒专用定时器工作。
46
WKTCL_CNT和WKTCH_CNT控制掉电唤醒专用定时器
STC15还有2个隐藏的特殊功能寄存器WKTCL_CNT 和WKTCH_CNT来控制内部掉电唤醒专用定时器。 WKTCL与WKTCL_CNT共用同一个地址, WKTCH与 WKTCH_CNT共用同一个地址, WKTCL_CNT和 WKTCH_CNT是隐藏的,对用户不可见。 WKTCL_CNT和WKTCH_CNT实际作计数器使用, 而 WKTCL和WKTCH实际作比较器使用。当用户对 WKTCL和WKTCH写入内容时, 该内容不会写入 WKTCL_CNT和WKTCH_CNT中。 当用户读寄存器WKTCL和WKTCH中的内容时, 实际 上读的是寄存器WKTCL_CNT和WKTCH_CNT中的 内容, 而不是WKTCL和WKTCH中的内容。
47
掉电唤醒专用定时器: WKTCH, WKTCL
通过软件将WKTCH寄存器中的WKTEN位置‘1’, 允许掉电唤醒专用定时器工作后, 当MCU一旦进入掉 电模式, 内部掉电唤醒专用定时器[WKTCH_CNT, WKTCL_CNT]就从7FFFH(改教材)开始计数, 直到计数到与{WKTCH[6:0], WKTCL[7:0]}寄存器所 设定的计数值相等后就启动系统时钟振荡器, 若主时钟使用内部系统时钟(或外部时钟, 由用户在ISP 烧录程序时设置), MCU在等待64(1024)个时钟后, MCU等待32768/16384/8192/4096个时钟 (由用户在ISP 烧录程序时自行设置)后, MCU认为此时系统时钟从 开始起振的不稳定状态已经过渡到稳定状态, 才将时 钟供给CPU, CPU获得时钟后, 程序从上次掉电的地 方继续往下执行。(STC15F100系列单片机器件手册) (改教材)
48
掉电唤醒专用定时器: WKTCH, WKTCL
掉电唤醒专用定时器计数一次的时间约为488μs, 当 然存在一定的误差。掉电唤醒专用定时器的计数时 间为: 488μs×{WKTCH[6:0], WKTCL[7:0]}寄存器所设定 的计数值 因此,掉电唤醒专用定时器最小计数时间约为488μs 掉电唤醒专用定时器最长计数时间约为 488μs ×32768=15.99s
49
PCON. PD: 置1时, 单片机进入掉电模式 利用掉电唤醒专用定时器唤醒单片机时, 只需在程 序的初始化部分设置WKTCL和WKTCH即可, 在 {WKTCH[6:0], WKTCL[7:0]}设置计数值, 注意将 WKTCH的最高位置1, 以允许掉电唤醒专用定时 器工作。 STC15F2K60S2单片机除增加了特殊功能寄存器 WKTCL和WKTCH以外,还设计了2个隐藏的特殊 功能寄存器SL_WKTCL和SL_WKTCH WKTCL_CNT和WKTCH_CNT来控制内部掉电唤 醒专用定时器。
50
SL_WKTCL_CNT, SL_WKTCH_CNT控制掉电唤醒专用定时器
SL_WKTCL_CNT与WKTCL共用同一个地址; SL_WKTCH_CNT与WKTCH共用同一个地址; SL_WKTCL_CNT和SL_WKTCH_CNT是隐藏的, 对 用户不可见。 用户对WKTCL和WKTCH写入的内容同时也 不会写 入SL_WKTCL_CNT和SL_WKTCH_CNT中。 当外部中断提前将单片机从停机模式唤醒时, 通过读 WKTCL和WKTCH的内容(实际是读 SL_WKTCL_CNT和SL_WKTCH_CNT中的内容), 可 读出单片机在停机模式/掉电模式等待的时间。
51
4)IDL: 置1时, 单片机进入空闲模式 (即IDLE模式)
PCON寄存器各位定义: IDL 位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 4)IDL: 置1时, 单片机进入空闲模式 (即IDLE模式) 在空闲模式下,仅CPU无时钟,停止工作。外部中 断、内部低电压检测电路、定时器、A/D转换等其余 模块仍正常运行。 看门狗在空闲模式下是否工作取决于看门狗控制寄 存器 “IDLE”模式位IDLE_WDT(WDT_CONTR.3): 当IDLE_WDT位被设置为 “1”时,看门狗定时器在 “空闲模式” 计数,即正常工作。 当IDLE_WDT位被清 “0”时, 看门狗定时器在“空闲模 式” 时不计数,即停止工作。
52
PCON寄存器各位定义: IDL 在空闲模式下,RAM、堆栈指针(SP) 、程序计 数器(PC) 、程序状态字(PSW) 、累加器(A) 等寄 存器都保持原有数据。I/O口保持着空闲模式被激 活前那一刻的逻辑状态。 空闲模式下单片机的所有外围设备都能正常运行 (除CPU无时钟不工作外) 。 当任何一个中断产生时,它们都可将单片机唤醒, 单片机被唤醒后,CPU将继续执行进入空闲模式 语句的下一条指令。
53
PCON寄存器各位定义: IDL 有两种方式可以退出空闲模式 外部中断、定时器中断、低电压检测中断以及 A/D转换中断中的任何一个中断的产生都会引起 IDL/PCON.0被硬件清除, 从而退出空闲模式。 外部RST引脚复位,将复位脚拉高,产生复位。 这种拉高复位引脚来产生复位的信号源需要被保 持24个时钟加上20us,才能产生复位,再将RST 引脚拉低,结束复位,单片机从用户程序的 0000H处开始正常工作。
54
PCON寄存器各位定义:GF1, GF0,SMOD,SMOD0
位号 D7 D6 D5 D4 D3 D2 D1 D0 位名称 SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 5)GF1和GF0是通用用户标志1和0,用户可以任意 使用。 6)SMOD和SMOD0:与电源控制无关,与串口有关, 在此不作介绍。(第8章已介绍)
55
省电方式 2、省电方式的应用 省电方式的应用主要涉及到省电方式的进入 (设置PCON)和省电方式的退出(唤醒)两个 方面。 下面举例说明程序的设计方法。 【例11-2】 设计程序,利用外部中断实现单 片机从掉电模式唤醒。
56
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
#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; //掉电唤醒管脚, INT0 sbit Power_Down_Wakeup_Pin_INT1=P3^3; //掉电唤醒管脚, INT1 sbit Normal_Work_Flashing_Led= P1^3; //正常工作状态指示灯 void Normal_Work_Flashing(void); void INT_System_init(void);
57
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
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,以便观察 }
58
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
void INT_System_init(void) //中断系统初始化 { IT0 = 0; //外部中断0,上升沿和下降沿都可触发中断 EX0 = 1; //允许外部中断0 中断 IT1 = 1; //外部中断 1,下降沿触发中断 EX1 = 1; //允许外部中断1中断 EA = 1; //开总中断控制位 }
59
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
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正常工作中断指示灯 Not_Power_Down_Led_INT0=1; //关INT0正常工作中断指示灯
60
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
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正常工作中断指示灯
61
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
void delay(void) { unsigned int j,k; for(k=0;k<2;++k) { for(j=0;j<=30000;++j) { _nop_(); }
62
[例11-2] 外部中断将单片机从掉电模式唤醒的C程序
void Normal_Work_Flashing(void) { Normal_Work_Flashing_Led = 0; delay(); Normal_Work_Flashing_Led = 1; }
63
2、省电方式的应用 【例11-3】 设计程序,利用外部中断实现单片机从掉电 模式唤醒。(汇编程序) 解:汇编语言程序如下:
$INCLUDE (STC15.INC) ;包含STC15寄存器定义文件 ORG H LJMP MAIN ORG H LJMP INT0_ISR ORG H LJMP INT1_ISR
64
[例11-3] 外中断将单片机从掉电模式唤醒的汇编程序
ORG 0100H MAIN:MOV SP, #70H MOV R3, #0 ;P1口LED递增方式变化, 表示程序开始运行 MAIN_LOOP: MOV A, R3 CPL A MOV P1, A LCALL DELAY INC R3 MOV A, R3 SUBB A, #18H JC MAIN_LOOP MOV P1, #0FFH ; 指示灯全熄灭,表示进入掉电模式状态 CLR IT0 ;设置上升沿和下降沿都可以激活外部中断0 SETB EX0 ;允许外部中断0 CLR IT1 ;设置上升沿和下降沿都可以激活外部中断1 SETB EX1 ;允许外部中断1 SETB EA ;开中断, 若不开中断,则不能从掉电模式中唤醒 [例11-3] 外中断将单片机从掉电模式唤醒的汇编程序
65
[例11-3] 外中断将单片机从掉电模式唤醒的汇编程序
;下条语句将使CPU进入空闲状态或掉电状态 ;外部中断可将CPU从掉电状态中唤醒,方法为:将外部中断脚拉低 MOV PCON, # B ; 令PD=1,进入掉电状态 MOV P1, #0DFH ;1101,1111B 请注意: ;1.外部中断使MCU退出掉电状态,执行本条指令后响应中断 ;表现为P1.5与P1.7 的LED 同时亮(INT0唤醒) ;2.外中断使MCU退出 idle 状态, 先响应中断后再执行本条指令 ; 表现为P1.7 的LED先亮(INT0唤醒),P 1.5 的LED后亮 ; 3.实际使用掉电模式时,本语句应用NOP代替 NOP ;实际使用掉电模式时,应在PCON赋值语句后多加几个NOP SJMP $ ;循环, 停机
66
[例11-3] 外中断将单片机从掉电模式唤醒的汇编程序
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 ;延时是为便于观察, 实际应用不需延时 DELAY: MOV R0, #0 MOV R1, #0 MOV R2, #02 DELAY_LOOP: DJNZ R0, DELAY_LOOP DJNZ R1, DELAY_LOOP DJNZ R2, DELAY_LOOP RET END
Similar presentations