找回密码
 立即注册
查看: 609|回复: 8

8G1K08A进入掉电模式下,电流还有10几mA | 已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-09-23 09:19:07

5

主题

8

回帖

63

积分

注册会员

积分
63
发表于 2024-9-25 11:19:41 | 显示全部楼层 |阅读模式
各位大佬,帮忙看一下这段代码,为什么进入掉电模式下。电流还有10多mA的电流?

谢谢。
截图202409251117488534.jpg




#define MAIN_Fosc                11059200UL        //定义主时钟
#define IDL             0x01                    //PCON.0
#define PD              0x02                    //PCON.1

#include        "STC8Gxxx.h"

/*************        本地变量声明        **************/

u16        pwm;                //pwm
bit        B_PWM_Dir;        //方向, 0为+, 1为-.
u8        cnt;

/*************        本地函数声明        **************/
void        UpdatePwm(u8 id, u16 pwm_value);        //id: PCA序号, 0~2对应 PCA0 ~ PCA2,  pwm_value: pwm值, 这个值是输出低电平的时间.
void        PCA_config(u8 io, u8 clk, u8 wide);        // io: 选择IO, 0: P5.5(ECI) P3.2(CCP0) P3.3(CCP1) P5.4(CCP2),   1: 选择P5.5(ECI) P3.1(CCP0) P3.3(CCP1) P5.4(CCP2), 2: P3.1(ECI) P3.2(CCP0) P3.3(CCP1) P5.5(CCP2)).
                                                                                        //clk: 选择时钟, 0: 12T,  1: 2T, 2: Timer0溢出率, 3: ECI引脚输入, 4: 1T,  5: 4T,  6: 6T,  7: 8T
                                                                                        //wide: pwm的宽度, 0: 8位PWM,  1: 7位PWM,  2: 6位PWM,  3: 10位位PWM
void        PwmOutContinue(u8 id, u8 level);        // id: PCA序号, 0~2对应 PCA0 ~ PCA2,  level: 连续输出的电平,0为低电平, 1为高电平.
void          delay_ms(u8 ms);

/******************** 主函数 **************************/
void main(void)
{

    IT0 = 0;                                    //使能INT0上升沿和下降沿中断
    EX0 = 1;                                    //使能INT0中断
    EA = 1;

        PCA_config(0, 4, 3);        //io=0:        选择P5.5(ECI) P3.2(CCP0) P3.3(CCP1) P5.4(CCP2), clk=4: 选择时钟1T, 3: 10位PWM
        
        pwm = 128;
        B_PWM_Dir = 0;

        while (1)
        {
            if(P32)
                {

                        delay_ms(1);
        
                        if(B_PWM_Dir)
                        {
                                if(--pwm <= 8)                B_PWM_Dir = 0;
                        }
                        else
                        {
                                if(++pwm >= 1016)        B_PWM_Dir = 1;
                        }
                        UpdatePwm(PCA1, pwm);        //更新PWM.
                        UpdatePwm(PCA2, pwm);        //更新PWM.
                }
                else
                {
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();

                        PWM1_OUT_1();        //初始输出0
                        PWM2_OUT_1();        //初始输出0

                        _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
            //   PCON = IDL;                                 //MCU进入IDLE模式
                         PCON = PD;                                  //MCU进入掉电模式

                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                }
        }
}

void INT0_Isr() interrupt 0
{
   _nop_();
}

//========================================================================
// 函数: void  delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 版本: V1.0, 2016-5-10
// 备注:
//========================================================================
void  delay_ms(u8 ms)
{
        u16 i;
        do
        {
                i = MAIN_Fosc / 10000;
                while(--i)        ;
        }while(--ms);
}



//========================================================================
// 函数: void        PCA_config(u8 io, u8 clk, u8 wide)
// 描述: PCA配置函数。
// 参数: io: 选择IO, 0: P5.5(ECI) P3.2(CCP0) P3.3(CCP1) P5.4(CCP2),   1: 选择P5.5(ECI) P3.1(CCP0) P3.3(CCP1) P5.4(CCP2), 2: P3.1(ECI) P3.2(CCP0) P3.3(CCP1) P5.5(CCP2)).
//       clk: 选择时钟, 0: 12T,  1: 2T, 2: Timer0溢出率, 3: ECI引脚输入, 4: 1T,  5: 4T,  6: 6T,  7: 8T
//                 wide: pwm的宽度, 0: 8位PWM,  1: 7位PWM,  2: 6位PWM,  3: 10位位PWM
// 返回: none.
// 版本: VER1.0
// 版本: V1.0, 2016-5-10
// 备注:
//========================================================================
void        PCA_config(u8 io, u8 clk, u8 wide)
{
        CR = 0;   //停止PCA定时器

        CMOD = (CMOD & ~0x0E) | ((clk & 7) << 1);                // PCA时钟选择, 0: 12T,  1: 2T, 2: Timer0溢出率, 3: ECI引脚输入, 4: 1T,  5: 4T,  6: 6T,  7: 8T

        PCA1_PWM(wide);        //PWM宽度        0: 8位PWM,  1: 7位PWM,  2: 6位PWM,  3: 10位PWM
        PCA2_PWM(wide);        //PWM宽度        0: 8位PWM,  1: 7位PWM,  2: 6位PWM,  3: 10位PWM
        
        PWM1_OUT_0();        //初始输出0
        PWM2_OUT_0();        //初始输出0

        if(io == 1)
        {
                P_SW1 = (P_SW1 & ~0x30) | 0x10;        // 将PCA/PWM切换到 P5.5(ECI) P3.1(CCP0) P3.3(CCP1) P5.4(CCP2)
                P3n_push_pull(0x0a);        //头文件的宏, P3.1 P3.3设置为推挽输出
                P5n_push_pull(0x10);        //头文件的宏, P5.4设置为推挽输出
        }
        else if(io == 2)
        {
                P_SW1 = (P_SW1 & ~0x30) | 0x20;        // 将PCA/PWM切换到 P3.1(ECI) P3.2(CCP0) P3.3(CCP1) P5.5(CCP2)
                P3n_push_pull(0x0c);        //头文件的宏, P3.2 P3.3设置为推挽输出
                P5n_push_pull(0x20);        //头文件的宏, P5.5设置为推挽输出
        }
        else
        {
        //        P_SW1 = P_SW1 & ~0x30;        // 将PCA/PWM切换到 P5.5(ECI) P3.2(CCP0) P3.3(CCP1) P5.4(CCP2)
                P3n_push_pull(0x8c);        //头文件的宏, P3.3设置为推挽输出
                P5n_push_pull(0x10);        //头文件的宏, P5.4设置为推挽输出
        //        P5n_pure_input(bitn)    //头文件的宏, P3.2设置为高阻输入
        }

        CH = 0;
        CL = 0;
//        PPCA = 1;        // 高优先级中断
        CR   = 1;        // 运行PCA定时器
}



//========================================================================
// 函数: void PwmOutContinue(u8 id, u8 level)
// 描述: 设置PWM连续输出电平(高或低).
// 参数:    id: PCA序号, 0~2对应 PCA0 ~ PCA2
//                 level: 连续输出的电平,0为低电平, 1为高电平.
// 返回: none.
// 版本: V1.0, 2018-5-10
//========================================================================
void        PwmOutContinue(u8 id, u8 level)
{
    if(id == 1)
        {
                if(level == 0)        PWM1_OUT_0();
                else                        PWM1_OUT_1();
        }
        else if(id == 2)
        {
                if(level == 0)        PWM2_OUT_0();
                else                        PWM2_OUT_1();
        }
}

//========================================================================
// 函数: void UpdatePwm(u8 id, u16 pwm_value)
// 描述: 更新PWM值.
// 参数:        id: PCA序号, 0~2对应 PCA0 ~ PCA2
//                 pwm_value: pwm值, 这个值是输出低电平的时间.
// 返回: none.
// 版本: V1.0, 2018-5-10
//========================================================================
void        UpdatePwm(u8 id, u16 pwm_value)
{
        if(id == 1)
        {
                PCA_PWM1 = (PCA_PWM1 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
                CCAP1H = (u8)pwm_value;
        //        PWM1_NORMAL();
        }
        else if(id == 2)
        {
                PCA_PWM2 = (PCA_PWM2 & ~0x32) | (u8)((pwm_value >> 4) & 0x30);
                CCAP2H = (u8)pwm_value;
        //        PWM2_NORMAL();
        }
}

//========================================================================
// 函数: void        PCA_Handler (void) interrupt PCA_VECTOR
// 描述: PCA中断处理程序.
// 参数: None
// 返回: none.
// 版本: V1.0, 2016-5-10
//========================================================================
void        PCA_Handler (void) interrupt PCA_VECTOR
{

        if(CCF1)        //PCA模块1中断
        {
                CCF1 = 0;                //清PCA模块1中断标志
        }

        if(CCF2)        //PCA模块2中断
        {
                CCF2 = 0;                //清PCA模块1中断标志
        }

        if(CF)        //PCA溢出中断
        {
                CF = 0;                        //清PCA溢出中断标志
        }

}





回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4851

回帖

8390

积分

超级版主

DebugLab

积分
8390
发表于 2024-9-25 12:41:47 | 显示全部楼层
哪里的电流,如何测的,是单片机VCC的电流还是整个电路的电流
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2024-9-25 15:06:34 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-25 17:19:48 | 显示全部楼层
U2也是有静态工作电流的,你拆了U2看看
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-09-23 09:19:07

5

主题

8

回帖

63

积分

注册会员

积分
63
发表于 2024-9-26 08:13:49 来自手机 | 显示全部楼层
谢谢大家
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-09-23 09:19:07

5

主题

8

回帖

63

积分

注册会员

积分
63
发表于 2024-9-26 08:15:01 来自手机 | 显示全部楼层
晓飛飛 发表于 2024-9-25 17:19
U2也是有静态工作电流的,你拆了U2看看

是这个电子件,没有开输入高阻。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-09-23 09:19:07

5

主题

8

回帖

63

积分

注册会员

积分
63
发表于 2024-9-26 08:15:35 来自手机 | 显示全部楼层
DebugLab 发表于 2024-9-25 12:41
哪里的电流,如何测的,是单片机VCC的电流还是整个电路的电流

整板的电流
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-9-26 08:39:52 来自手机 | 显示全部楼层
可以分开一个一个测电流,就知道那个耗电了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-09-23 09:19:07

5

主题

8

回帖

63

积分

注册会员

积分
63
发表于 2024-9-26 17:15:52 | 显示全部楼层
so*** 发表于 2024-9-26 08:39
可以分开一个一个测电流,就知道那个耗电了

搞定了,谢谢大家
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 22:14 , Processed in 0.173068 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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