外部中断0接了一个轻触按键到地,程序进入空闲后打开外部中0下降沿唤醒功能并进入掉电模式。
电压高于3V时,没问题,低于3V时,有时需要按3-5次能唤醒一次,大部分无法正常唤醒。
以下是该新款STC MCU的简介:
正好我近期也拿了10片ST8G1K08 TSSOP20测试,下载程序时允许低压复位,则MCU在2.0~5.5V唤醒均正常,下载程序时禁止低压复位,则MCU在1.8~5.5V唤醒均正常,没有碰到楼主的情况。
我测试的代码,希望对楼主和大家有参考:
#define MAIN_Fosc 11059200L //定义主时钟
#include "..\..\STC8Gxxx.h"
/************* 功能说明 **************
演示INT0下降沿唤醒MCU。
唤醒后P1.0电量LED指示.
******************************************/
void delay_ms(u8 ms);
void main(void)
{
P1n_standard(0xff); //P1口设置为准双向口
P3n_standard(0xff); //P3口设置为准双向口
P5n_standard(0x30); //P5.4 P5.5口设置为准双向口
EA = 1; //Enable all interrupt
while(1)
{
P10 = 0; //取反指示引脚
delay_ms(50); //delay 20ms, 相当于去抖动 (按用户程序需要)
P10 = 1; //取反指示引脚
while(!INT0); //等待外中断为高电平 (按用户程序需要)
delay_ms(20); //delay 20ms, 相当于去抖动 (按用户程序需要)
IT0 = 1; //INT0 下降沿中断
IE0 = 0; //清除外中断0标志位
_nop_();
_nop_();
EX0 = 1; //INT0 允许中断
_nop_();
_nop_();
PCON |= 0x02; //Sleep
_nop_();
_nop_();
_nop_();
EX0 = 0; //INT0 禁止中断 (按用户程序需要)
}
}
/********************* INT0中断函数 *************************/
void INT0_int (void) interrupt 0 //进中断时已经清除标志
{
}
//========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数.
// 返回: none.
// 版本: VER1.0
// 日期: 2020-3-25
// 备注:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do
{
i = MAIN_Fosc / 10000L;
while(--i) ;
}while(--ms);
}
打赏帖 | |
---|---|
分享一种检测按键状态的方法被打赏20分 | |
周末总结一下,STM32C0系列的开发经验被打赏50分 | |
【Cortex-M】Systick Timer使用被打赏10分 | |
分享汽车防盗系统的组成与分类(一)被打赏5分 | |
VOFA+波形显示+JYD-31蓝牙发送和解析不定长数据被打赏10分 | |
【换取手持数字示波器】-STM32F4PWM控制LED灯管亮度被打赏22分 | |
【换取手持数字示波器】STM32F4驱动RPR-0521RS照度、接近一体型传感器被打赏23分 | |
宏定义和const关键字定义被打赏5分 | |
【分享开发笔记,赚取电动螺丝刀】几个单片机I2S外设的BLCK时钟对比被打赏20分 | |
【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集被打赏100分 |