数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2933|回复: 16

[other] 求改STC15F104W掉电模式唤醒

[复制链接]
发表于 2021-8-22 00:46:20 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
本帖最后由 枫飞秋语 于 2021-8-22 00:47 编辑

以前1元撸了一个充电的喷雾补水仪闲置,现在想利用改成喷香器,开关连续按两次为启动,按一次关闭,想改为10分钟启动一次10秒后关闭,不需要很精准,自己乱写了个延时代码,突然想到电池耐不耐用,一查,单片机工作电流20ma左右,这样没多久电就耗光了,恰巧发现单片机有个极限省电模式,掉电模式,,自己试验了下,进入掉电后,无法唤醒了。。求高手指点这是普通延时代码

  1. #include <REG51.H>
  2. #include <intrins.h>
  3. sbit LED1=P3^3;
  4. void Delay500ms()                //@11.0592MHz
  5. {
  6.         unsigned char i, j, k;
  7.         _nop_();
  8.         _nop_();
  9.         i = 22;
  10.         j = 3;
  11.         k = 227;
  12.         do
  13.         {
  14.                 do
  15.                 {
  16.                         while (--k);
  17.                 } while (--j);
  18.         } while (--i);
  19. }
  20. void DelayMs(unsigned int n)
  21. {
  22.    do
  23.    {
  24.           Delay500ms();
  25.    }while(n--);
  26. }
  27. void main()
  28. {
  29.    LED1=1;
  30.    while(1)
  31.    {
  32.                   DelayMs(2);
  33.                   LED1=0;
  34.                          DelayMs(1);
  35.                   LED1=1;
  36.                          DelayMs(1);
  37.                   LED1=0;
  38.                          DelayMs(1);
  39.                   LED1=1;
  40.                   DelayMs(2);
  41.                   LED1=0;
  42.                          DelayMs(1);
  43.                   LED1=1;
  44.    }
  45. }
复制代码
这是尝试修改的掉电延时代码,睡了之后,醒不过来了。。。。
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. sfr WKTCL=0xAA;
  4. sfr WKTCH=0xAB;
  5. sbit LED1=P3^3;
  6. void Delay1ms()                //@11.0592MHz
  7. {
  8.         unsigned char i, j;
  9.         _nop_();
  10.         _nop_();
  11.         _nop_();
  12.         i = 11;
  13.         j = 190;
  14.         do
  15.         {
  16.                 while (--j);
  17.         } while (--i);
  18. }
  19. void Delayms(unsigned int n)
  20. {
  21.    do
  22.    {
  23.           Delay1ms();
  24.    }while(n--);
  25. }
  26. void main()
  27. {
  28.     unsigned char i;
  29.           WKTCL = 49;      //488us*(49+1) = 24.4ms
  30.     WKTCH = 0x80;     
  31.     LED1=1;
  32.        while(1)
  33.        {
  34.          i=2;      
  35.           while(i--)
  36.            {
  37.             PCON = 0x02;   
  38.             _nop_();            
  39.             _nop_();
  40.                                          }
  41.                                                 LED1=0;
  42.                    Delayms(100);
  43.                         LED1=1;
  44.                         Delayms(100);
  45.                         LED1=0;
  46.                         Delayms(100);
  47.                         LED1=1;
  48.                         Delayms(500);
  49.                         LED1=0;
  50.                         Delayms(100);
  51.                         LED1=1;                                                  
  52.         }
  53. }
复制代码




发表于 2021-8-22 08:04:07 | 显示全部楼层
单芯片工作电流一般就几ma,进入省电要关闭引脚,拉高或者拉低,以减小耗电,貌似掉电模式唤醒要外部中断唤醒,stc15f104好像是没有掉电唤醒定时器的,空闲模式才能定时器,外部,ADC唤醒

打赏

参与人数 1家元 +6 收起 理由
家睦 + 6

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

发表于 2021-8-22 09:02:24 | 显示全部楼层
掉电模式需要外部中断唤醒的
还需注意楼主用的单片机外部中断貌似还有BUG,记不太清了
回复 支持 反对

使用道具 举报

发表于 2021-8-22 10:15:09 | 显示全部楼层
STC15F104
这种  IO 中断都不能使用的超大BUG还拿出来卖也是坑了他爹了。




回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 00:04:10 | 显示全部楼层
ploestar 发表于 2021-8-22 08:04
单芯片工作电流一般就几ma,进入省电要关闭引脚,拉高或者拉低,以减小耗电,貌似掉电模式唤醒要外部中断唤 ...

那空闲模式要怎么改呢
回复 支持 反对

使用道具 举报

发表于 2021-8-23 17:13:40 | 显示全部楼层
你为什么还要
i=2;
while(i--)
{
PCON = 0x02;   
            _nop_();            
            _nop_();
}
回复 支持 反对

使用道具 举报

发表于 2021-8-24 16:49:40 | 显示全部楼层
本帖最后由 kindzhon 于 2021-8-24 16:58 编辑

  •           WKTCL = 49;      //488us*(49+1) = 24.4ms
  •     WKTCH = 0x80;

你这个设定,只是睡眠了24ms,等于根本没用啊。
你看一下我的帖子http://bbs.mydigit.cn/read.php?tid=2395222
里面有源码。不过我用的是STC15w104.
回复 支持 反对

使用道具 举报

发表于 2021-8-24 18:48:38 | 显示全部楼层
aqxgm 发表于 2021-8-22 09:02
掉电模式需要外部中断唤醒的
还需注意楼主用的单片机外部中断貌似还有BUG,记不太清了 ...

104E有问题,停产了,W是替代品
回复 支持 反对

使用道具 举报

发表于 2021-8-26 17:09:01 | 显示全部楼层
楼主,换 15W系列的

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 11:46:23 | 显示全部楼层
kindzhon 发表于 2021-8-24 16:49
  •           WKTCL = 49;      //488us*(49+1) = 24.4ms
  •     WKTCH = 0x80;

  • {
             i=2;      
              while(i--)
               {

    改i的数值,就是掉电模式的时长,已经测试成功了。。是电脑上仿真不能退出掉电模式,插面包板测试成功了。。。谢谢了,看了你的代码,,学习了
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-8-29 11:48:19 | 显示全部楼层
    水表君 发表于 2021-8-24 18:48
    104E有问题,停产了,W是替代品

    是电脑仿真不能退出掉电模式,实操有效的。。谢谢了。。F104E能用,不过考虑是1S锂电准备买W了。。昨晚不小心翻出15W204S。。。烧录进去一样有效,不用等快递了。。哈哈
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-8-29 11:48:53 | 显示全部楼层
    devcang 发表于 2021-8-26 17:09
    楼主,换 15W系列的

    看来低压版比较方便受欢迎些
    回复 支持 反对

    使用道具 举报

    发表于 2021-8-29 23:55:41 | 显示全部楼层
    枫飞秋语 发表于 2021-8-29 11:48
    看来低压版比较方便受欢迎些

    15F系列,好多有bug的。

    W是宽电压
    回复 支持 反对

    使用道具 举报

    发表于 2021-9-1 22:04:12 | 显示全部楼层
    :lol:haha  掉电模式...
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-9-12 01:07:27 | 显示全部楼层
    奶瓶_NP 发表于 2021-9-1 22:04
    haha  掉电模式...

    别笑。。已经成功了
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2021-9-28 12:27:18 | 显示全部楼层
    上官梦舞 发表于 2021-8-23 17:13
    你为什么还要
    i=2;
    while(i--)

    还是通过改变i的数值来设定进入掉电模式的时长。。
    回复 支持 反对

    使用道具 举报

    发表于 2021-9-30 14:45:20 | 显示全部楼层
    用以下电路配合程序可构成定时唤醒
    单片机正常运行时P20输出低电平对电容放电,NMOS管截止
    进入掉电前P20输出高电平对电容充电
    基于准双向口特性(灌电流大,拉电流小)
    电容电压缓慢上升
    直至达到NMOS 管的Vgsth
    NMOS管导通产生下降沿
    唤醒单片机
    虽说电压上升缓慢
    但也可能只是几秒钟(需配合电容电阻)
    可在中斷中对唤醒计数
    到达所需时间才运行你的程序

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

    x
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 微信登录

    本版积分规则

    APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

    闽公网安备35020502000485号

    闽ICP备2021002735号-2

    GMT+8, 2025-7-21 20:32 , Processed in 0.358800 second(s), 14 queries , Redis On.

    Powered by Discuz!

    © 2006-2025 MyDigit.Net

    快速回复 返回顶部 返回列表