whoyzf 发表于 2024-7-23 11:37:20

STC8A8K64D4掉电模式实测及问题反馈

本帖最后由 whoyzf 于 2024-7-23 17:05 编辑

stc8a掉电模式测试,实测功耗1uA左右。代码如下



问题这个芯片的IO口不能代换。
具体如下:
5V供电,我用P04,P05高阻且置1(或者准双向口置1)实测电压只有3V左右,LED点亮;
而用P32,P33,高阻且置1,有5V,led熄灭。

解决办法:我只能飞线了。。。
#include "STC8A8K64D4.h"
#include "intrins.h"

sfr   VOCTRL      =   0xbb;
#define IDL             0x01                  //PCON.0
#define PD            0x02                  //PCON.1
//sbit    P34         =   P3^4;
//sbit    P35         =   P3^5;


void main()
{

    P0M0 = 0x00; P0M1 = 0xff;         
    P1M0 = 0x00; P1M1 = 0xFF;
    P2M0 = 0x00; P2M1 = 0xff;
    P3M0 = 0x00; P3M1 = 0xff;
    P3M0 = 0x00; P3M1 = 0xf3;
    P4M0 = 0x00; P4M1 = 0xff;
                P5M0 = 0x00; P5M1 = 0xff;

//      P_SW2 |= 0x80;   //允许操作扩展寄存器
//    P1PU = 0xFF;
//          P1DR = 0x00;
      
    P0=0x00;
          P1=0x00;
          P2=0x00;
                P22=1;   //MOS管关闭
          P27=1;
          P3=0x00;
          P4=0x00;
          P5=0x00;      

      P43=1;
      P32=1;P33=1;   //led灭灯
   P_SW2 |= 0x80;   //允许操作扩展寄存器
    P0IE = 0x00;
          P1IE = 0x00;
          P2IE = 0x00;
          P3IE = 0x00;
          P4IE = 0x00;
          P5IE = 0x00;

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

    while (1);
}

如果使用外部中断唤醒,数字输出要开启,否则直接进入中断。
    INTCLKO = EX3|EX2;      
   P_SW2 |= 0x80;   //允许操作扩展寄存器

          P3IE = 0xC0; //

EA=1;
#include "STC8A8K64D4.h"
#include "intrins.h"

sfr   VOCTRL      =   0xbb;
#define IDL             0x01                  //PCON.0
#define PD            0x02                  //PCON.1
#define EX2             0x10
#define EX3             0x20
#define EX4             0x40
//sbit    P34         =   P3^4;
//sbit    P35         =   P3^5;

void INT0_Isr() interrupt 0
{
    P32 = ~P32;                                 //测试端口
}
void INT2_Isr() interrupt 10
{
    P32 = ~P32;                                 //测试端口
          P22 = ~P22;
}
void INT3_Isr() interrupt 11
{
    P33 = ~P33;                                 //测试端口
                P27 = ~P27;
}
void main()
{
    VOCTRL = 0x00;                              //掉电模式时使用内部SCC模块,功耗约1.5uA
//VOCTRL = 0x80;                              //掉电模式时使用外部SCC模块,功耗约0.15uA
//    EX0 = 1;                                    //使能INT0中断,用于唤醒MCU
    INTCLKO = EX3|EX2;                              //使能INT3中断

      
      
    P0M0 = 0x00; P0M1 = 0xff;         
    P1M0 = 0x00; P1M1 = 0xFF;
    P2M0 = 0x00; P2M1 = 0xff;
    P3M0 = 0x00; P3M1 = 0xff;
//    P3M0 = 0x00; P3M1 = 0xf3;
    P4M0 = 0x00; P4M1 = 0xff;
                P5M0 = 0x00; P5M1 = 0xff;

      
    P0=0x00;
          P1=0x00;
          P2=0x00;
          P3=0x00;
          P4=0x00;
          P5=0x00;      

      
   P_SW2 |= 0x80;   //允许操作扩展寄存器
    P0IE = 0x00;
          P1IE = 0x00;
          P2IE = 0x00;
          P3IE = 0xC0; //INT0管脚,不能关闭数字输入
          P4IE = 0x00;
          P5IE = 0x00;
      
   EA=1;
         

    _nop_();
    _nop_();
               
//    PCON = IDL;                                 //MCU进入IDLE模式
    PCON = PD;                                  //MCU进入掉电模式
               P3M0 = 0x00; P3M1 = 0xf3;      //P32,P33准双向口。临时打开可以
   P2M0 = 0x00; P2M1 = 0x7b;      //P22,P27准双向口

    _nop_();
    _nop_();
                _nop_();
    _nop_();
    _nop_();                              
      
    while (1);
}





DebugLab 发表于 2024-7-23 14:26:15

既然高阻了,和置0置1就没有关系了,电压由外部电路决定
页: [1]
查看完整版本: STC8A8K64D4掉电模式实测及问题反馈