本帖最后由 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);
- }
-
复制代码
|