标题: STC15F104W单片机如何进入低功耗模式? [打印本页]

作者: 林大侠    时间: 2021-3-18 17:10
标题: STC15F104W单片机如何进入低功耗模式?
这段时间迷上了单片机,买了个开发版研究跟着看郭老师视频跟着做,现在只会点亮LED灯了,然后通过按键控制某个IO口输出低电平。我现在自己做了个锂电池供电的小夜灯,接了一个按键开关,和一个光线传感模块,现在能正常使用,但是这个单片机有待机功耗,用锂电池供电用不了几周没电了,各位大侠怎么写程序让它进入低功耗,然后通过外部IO口输入低电平让它进入工作状态,谢谢各位!


类似这样的单片机,图片是在网上找的参考一下。谢谢感激!



作者: 天ノ忆    时间: 2021-3-18 17:40
因为不知道你是什么样子的单片机,所以只能说有一个函数,直接调用可以进入低功耗模式,结束低功耗模式也有几种方法,但是只会点亮LED灯的话推荐使用外部中断退出低功耗模式
作者: 林大侠    时间: 2021-3-18 18:05
天ノ忆 发表于 2021-3-18 17:40
因为不知道你是什么样子的单片机,所以只能说有一个函数,直接调用可以进入低功耗模式,结束低功耗模式也有 ...

单片机是STC15F104W,因为这个IO口少,新手学习起来简单,谢谢大侠!
作者: man1234567    时间: 2021-3-18 18:14
天ノ忆 发表于 2021-3-18 17:40
因为不知道你是什么样子的单片机,所以只能说有一个函数,直接调用可以进入低功耗模式,结束低功耗模式也有 ...

楼主图纸上画的是STC15F104E的8脚芯片,不知道这个是不是单片机 ?
如果是,能不能给个具体函数 ?
作者: 林大侠    时间: 2021-3-18 18:45
man1234567 发表于 2021-3-18 18:14
楼主图纸上画的是STC15F104E的8脚芯片,不知道这个是不是单片机 ?
如果是,能不能给个具体函数 ?

对的,是这个单片机,就是不知道怎么操作让它进入低功耗模式,然后通过IO口接低电平让它唤醒。感谢!!
作者: 张天师    时间: 2021-3-18 19:09
以下提供参考,要什么功能自己完善

    IT0 = 0;                    //设置INT0的中断类型为上升沿和下降沿,上升沿和下降沿均可唤醒
//  IT0 = 1;                    //设置INT0的中断类型为仅下降沿,下降沿唤醒
    EX0 = 1;                    //使能INT0中断
    EA = 1;

掉电模式
    {
        PCON = 0x02;            //MCU进入掉电模式
        _nop_();                //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序
        _nop_();
        _nop_();
        _nop_();
    }
//中断服务程序
void exint0() interrupt 0       //INT0中断入口
{
    P10 = !P10;                 //将测试口取反
}




作者: wc8841484    时间: 2021-3-18 19:11
去STC下载个说明书,有省电模式
https://www.stcmcudata.com/

http://www.stcmcudata.com/datasheet/stc/STC-AD-PDF/STC15.pdf
作者: wulin    时间: 2021-3-18 20:08


作者: angmall    时间: 2021-3-18 20:14
我给你来个程序试试


  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F100 系列 INT0唤醒掉电模式举例--------------------------*/
  4. /* --- Mobile: (86)13 922 805190 -------------- -------------------------*/
  5. /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
  6. /* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序        */
  7. /*---------------------------------------------------------------------*/

  8. //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
  9. //若无特别说明,工作频率一般为11.0592MHz


  10. #include "reg51.h"
  11. #include "intrins.h"

  12. //-----------------------------------------------

  13. sfr P3M1 = 0xb1;
  14. sfr P3M0 = 0xb2;

  15. bit FLAG;                       //1:上升沿中断 0:下降沿中断
  16. sbit P33 = P3^3;

  17. //-----------------------------------------
  18. //中断服务程序
  19. void exint0() interrupt 0       //INT0中断入口 P3.2
  20. {
  21.     P33 = !P33;                 //将测试口取反
  22.     FLAG = INT0;                //保存INT0口的状态, INT0=0(下降沿); INT0=1(上升沿)
  23. }

  24. //-----------------------------------------------

  25. void main()
  26. {
  27.     P3M0 = 0x00;
  28.     P3M1 = 0x00;


  29.     IT0 = 0;                    //设置INT0的中断类型为上升沿和下降沿,上升沿和下降沿均可唤醒
  30. //  IT0 = 1;                    //设置INT0的中断类型为仅下降沿,下降沿唤醒

  31.     EX0 = 1;                    //使能INT0中断
  32.     EA = 1;

  33.     while (1)
  34.     {
  35.         PCON = 0x02;            //MCU进入掉电模式
  36.         _nop_();                //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序
  37.         _nop_();
  38.     }
  39. }

复制代码

作者: 林大侠    时间: 2021-3-30 09:13
angmall 发表于 2021-3-18 20:14
我给你来个程序试试

老师,是不是中断程序INT0中断口是P3.2嘛?需要给P3.2引脚接入高电平或低电平去唤醒休眠?


作者: angmall    时间: 2021-3-30 12:21
林大侠 发表于 2021-3-30 09:13
老师,是不是中断程序INT0中断口是P3.2嘛?需要给P3.2引脚接入高电平或低电平去唤醒休眠?

是的,试试不就知道了,实践是检验真理的唯一标准。

作者: lwh999995    时间: 2021-3-30 18:11
林大侠 发表于 2021-3-30 09:13
老师,是不是中断程序INT0中断口是P3.2嘛?需要给P3.2引脚接入高电平或低电平去唤醒休眠?

唤醒是外部中断0输入,上升沿或下降沿。
上升沿:由低电平转换到高电平的过程。
下降沿:由高电平转换到低电平的过程。
P32口在头文件里面就定义了的,名为 INT0。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1