这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求解!新款STC单片机STC8G1K08外部中断在低于3V时很难唤醒掉电模式

共4条 1/1 1 跳转至

求解!新款STC单片机STC8G1K08外部中断在低于3V时很难唤醒掉电模式

工程师
2020-03-31 21:41:24     打赏

外部中断0接了一个轻触按键到地,程序进入空闲后打开外部中0下降沿唤醒功能并进入掉电模式。
电压高于3V时,没问题,低于3V时,有时需要按3-5次能唤醒一次,大部分无法正常唤醒。


以下是该新款STC MCU的简介:

image.png




关键词: STC8G1K08     STC8G     STC     中断     掉电    

工程师
2020-03-31 21:49:11     打赏
2楼
这个情况应该是无解吧? 难不成,我只能规定3.3V以上用就行了?



工程师
2020-03-31 21:55:41     打赏
3楼

猜测一下,是不是跟掉电检测的电压配置有关。


工程师
2020-03-31 22:03:40     打赏
4楼

正好我近期也拿了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);
}


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]