STC8H系列—3.省电模式与唤醒控制教程

一、前言:

   STC单片机加入电源管理功能,当其用作便携式设备时,有限的电池供电,此时节能成为单片机必备的功能。单片机的休眠分两种模式,一种是掉电模式,即CPU与外设全部停止工作,另一种是IDLE模式,即CPU停止工作外设正常运行。不管是哪种模式区别在于节能省电程度不一,对于电池容量有限又需长时待机的需求理想的情况下最好是待机不耗能,实际上最低也有0.4uA的电流。单片机进入休眠模式后,可通过多种方式来唤醒,一种方式是计时唤醒,另一种方式是触发中断唤醒,此种方式只要发出中断请求立马唤醒系统,比如说发出一个外部中断、一个串口中断、一个定时器中断等均可用作唤醒系统,无需在中断服务中做出一定的处理。以下的案例一个简单的休眠程序,当系统进入休眠状态按下INT0后中断产生唤醒系统,LED灯变换状态,或系统大约每2s唤醒休眠中的系统,LED灯变换状态。

二、知识简介:

PCON是电源管理寄存器,其中的PD位,当置位1时,系统当即进入掉电模式。IDL位为空闲模式,当置位1时,系统当即进入空闲模式。

WKTCH和WKTCL是一个15位的掉电唤醒定时器,当设定的设时到位后,休眠被唤醒,其中的WKTCH.WKTEN位必须置1。以下是WKTCH、WKTCHL定时参考表。

三、实验平台搭建:

   1、MCU:STC-打狗棒系列核心实验板 V2.3

   2、实验板平台:德飞莱LY-51s

   3、硬件连接表:

     K1------>P20    停止休眠

      LED----->P00   指示灯

四、测试源代码:

#include <STC8H.h>

#include "intrins.h"

sbit Led=P0^0;

#define RSTFLAG  (*(unsigned char volatile xdata *)0xfe99) //声明复位标志寄存器

void Delay1ms(unsigned char x);//当主时钟频率为12M,1ms延时为基准

void init_IO();//初始化IO

void main()

{

      P_SW2 |= 0x80;  //扩展寄存器XFR访问使能

      init_IO();

      EX0=1;//外部中断唤醒

      EA=1;  

      Led=0;

      WKTCH=0x8F;//定时2秒唤醒

      WKTCL=0xFF;  

   while(1)

    {   

       PCON|=0x02;//进入休眠

       Led=~Led;

      }

}

void init_IO()

{

   RSTCFG=0x50;  //开启RST键进入ISP模式

   P0M1 = 0x00;   P0M0 = 0x00;   //设置P0口为准双向口

   P1M1 = 0x00;   P1M0 = 0x00;   //设置P1口为准双向口

   P5M1 = 0x00;   P5M0 = 0x00;   //设置P5口为准双向口

}

void Delay1ms(unsigned char x)    //@12.000MHz

{

   unsigned char i, j;

   i = 16;

   j = 147;

   while(x--)

   {

      do

      {

        while (--j);

      } while (--i);

   } 

}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欢迎新手学习,老手指教。 1.使用STC15W408AS。DS1302时钟,闹钟,管码管,掉电模式(进入掉电模式电流<10ua,使用18650供电,3.7-5V电池也可通用)。 2.详细注释,非常适合新手学习。如: sfr WKTCL = 0xaa; //掉电唤醒定时器计时低字节 sfr WKTCH = 0xab; */ //掉电唤醒定时器计时高字节 //----------------------------------------------- //sbit P37 = P3^7; //+分。 //sbit P36 = P3^6; //+时。 //sbit P35 = P3^5; //调闹钟。 //sbit P34 = P3^4; //调时间。//-调时间-按P34按P36放P34放P36才能调时间- //sbit P33 = P3^3; //延时18小时。置值65535. //sbit P32 = P3^2; //确认--延时200S。 //sbit P31 = P3^1; //开关闹钟。 sbit TSCLK = P1^5;//时钟线 接到P37上用杜邦线 sbit TIO = P1^6;//数据线,接到P36上 sbit TRST = P1^7;//使能端,接到P35上 //sbit P54 = P5^4;//运行指示灯 //sbit P55 = P5^5; //蜂鸣器。 //------函数声明---------------- void delayms(uint z); //STC15W204S单片机即1MS延时=0.9989MS-11.0592 void qingling(); //P3清零 void Display(uchar Sec, Min);//显示 void Write_DS1302_DAT(uchar cmd, uchar dat);//写DS1302数据 uchar Read_DS1302_DAT(uchar cmd);////读DS1302数据 uchar Dat_Chg_BCD(uchar dat);//数据转BCD码 uchar BCD_Chg_Dat(uchar dat);//BCD码转换为数据 void tiaotime(); //调时间。 uchar duchi();//读一次小时数 uchar dufen();//读分钟数。 ---------------------------------- / ge = ii; //求余-求里面除整数10后的余数 // shi = ii/10; //求模-求里面有多少个整数倍10. -------------------------------- P11 = 0;//点亮第二位数码管 if(Sec1==1) //在调用显示前用求余法确定Sec1是0还是1 { uu=table[Hour]<>1; //再右移一位左补0,即改变第7位变成0。目的显示:两点。 P2 = uu;//显示第二位数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值