STC8H1K08-QFN待机问题,请高手指点

[复制链接]
1075|11
手机看帖
扫描二维码
随时随地手机跟帖
chineseboyzxy|  楼主 | 2024-9-29 09:14 | 显示全部楼层 |阅读模式
本帖最后由 chineseboyzxy 于 2024-9-29 09:17 编辑

板上只焊单片机时,待机电流用47表测12uA,手册上写的好像是不到1uA。还有一个奇怪的现象,用串口板3.3V供电,按开关键可以正常开机或关机(待机),LED正常亮灭。用电池供电时,上电的时候LED是灭的,按开关键就亮了,这也正常,但是再按开关键,按下去LED灭了,松开按键,又亮了。程序就那一点点,怎么看也找不出是哪里的问题。还请高手指点迷津。
MCU.png
LCD.png BAT.png
KEY.png
//*****************************************主程序*****
void main()
{
        RSTCFG=0;//关闭低压复位
        P1IE=0;
        P3IE=0x80;
        P5IE=0;    //关闭数字输入,除按键P37
        P3M1=0x7f; //按键P37双向其他高阻
        INTCLKO=0x20;
        EA=1;
        PCON=0x02;//-----MCU进入掉电模式
        _nop_();
        _nop_();
        mcuint();


        while (1)
        {
                while (PWR==0)
                        {
                        LED=1;
                        while(PWR==0);
                        for (i=0; i<1000; i++);
                        while(PWR==0);
                        P1IE=0x08;
                        P3IE=0x80;
                        P5IE=0;
                        AEN=0;
                        RFEN=0;
                        P1M1=0xf7;
                        P3M1=0x7f;
                        P5M1=0xff;
                        EA=1;
                        PCON=0x02;//MCU进入掉电模式
                        _nop_();
                        _nop_();
                        mcuint();
                        while(PWR==0);
                        for (i=0; i<1000; i++);
                        while(PWR==0);
                        }

}
PD.png



使用特权

评论回复

相关帖子

LcwSwust| | 2024-9-29 13:37 | 显示全部楼层
使能了中断但没写中断服务函数?

使用特权

评论回复
wang369| | 2024-9-29 15:21 | 显示全部楼层
按键消抖,中断,上下拉电阻?基本就这几个问题

使用特权

评论回复
coody| | 2024-9-29 16:15 | 显示全部楼层
一般是按键没有消抖导致的,中断响应式很快的。
MCU睡眠时电流不到1uA的,一般是0.6uA左右。

STC Mcu睡眠时IO不耗电的处理方法:

1、对于设置为准双向口、推挽输出、开漏输出低电平的IO,IO本身不耗电,输出电平与外部电路配合成外部电路不耗电的方式即可。

2、设置为高阻或开漏输出高电平的IO,如果悬空,则会因为输入状态不确定导致有电流,以下两种方式任选一种:
    A、IO口接一个确定的高电平(电压高于VDD-0.3)或低电平(电压低于0.3V),否则耗电。
    B、将IO口对应的数字输入功能关闭(对于STC8系列、STC32系列)。
       比如关闭P1.0、P1.1的数字输入:
         P_SW2 |= 0x80;   //允许操作扩展寄存器
         P1IE   = ~0x03;  //将P1.0 P1.1的数字输入功能关闭

3、睡眠前,禁止ADC(如果已经允许的话),禁止模拟比较器(如果已经允许的话)。

4、在主程序进入睡眠,睡眠后至少要加3个空操作(NOP)。
   PCON |= 0x02;
   _nop_();
   _nop_();
   _nop_();

使用特权

评论回复
STCMCUNT015| | 2024-9-29 17:04 | 显示全部楼层
6879166f917d2afb39.png
R1/R2 用10K,肯定影响通信,直接短路

使用特权

评论回复
捉虫天师| | 2024-9-29 17:09 | 显示全部楼层
IO引脚配置好没。

使用特权

评论回复
chineseboyzxy|  楼主 | 2024-9-29 17:19 | 显示全部楼层
LcwSwust 发表于 2024-9-29 13:37
使能了中断但没写中断服务函数?

中断服务有,只有一条LED=0的指令。

使用特权

评论回复
chineseboyzxy|  楼主 | 2024-9-29 17:21 | 显示全部楼层
STCMCUNT015 发表于 2024-9-29 17:04
R1/R2 用10K,肯定影响通信,直接短路

这个是失误了,原理图忘了改,实际用的是33R的。

使用特权

评论回复
chineseboyzxy|  楼主 | 2024-9-29 17:24 | 显示全部楼层
wang369 发表于 2024-9-29 15:21
按键消抖,中断,上下拉电阻?基本就这几个问题

按键加10K上拉试了,也不行。不说有没有消抖,关键是用串口板供电就一切正常,换电池就不行,想不明白啥道理,无从下手呀。那程序里开机上电直接就休眠了,再下来就是按一下开机,再按一下开机,就这么点功能。

使用特权

评论回复
chineseboyzxy|  楼主 | 2024-9-29 20:04 | 显示全部楼层
本帖最后由 chineseboyzxy 于 2024-9-29 20:05 编辑
wang369 发表于 2024-9-29 15:21
按键消抖,中断,上下拉电阻?基本就这几个问题

这样按键消抖行不行?我试了一下,差不多能正常关掉了。
while(PWR==0);
for (i=0; i<10000; i++);
while(PWR==0);
for (i=0; i<10000; i++);
while(PWR==0);
for (i=0; i<10000; i++);

使用特权

评论回复
xionghaoyun| | 2024-9-30 09:04 | 显示全部楼层
消抖?

使用特权

评论回复
chineseboyzxy|  楼主 | 2024-9-30 16:04 | 显示全部楼层

是的,按键消抖,这样可以吗?有没有更稳定的方法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

547

帖子

0

粉丝