qepuemc 发表于 2024-12-18 22:15:41

低功耗不循环32G8K64运行空3UA正常6MA只进一次休眠请教怎么再次休眠

<pre><code>                        //休眠时间3
                SetWakeUpTime(5000);    //2秒后醒来
                PCON |= 0x02;   //Sleep   
                _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义
                //休眠时间3
</code></pre>
<p>上面代码可以进放休眠</p>
<p>放到了while中。</p>
<p>不休眠了就开始运行别的,不过以后再也不会休眠了。求旨教</p>
<p>加了好多的EA=0;也不管用!</p>
<pre><code>EA=0;
                                                        //休眠时间3
                        SetWakeUpTime(5000);    //2秒后醒来
                                EA=0;
                        PCON |= 0x02;   //Sleep   
                                EA=0;
                        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义       
                        //休眠时间3
</code></pre>

DebugLab 发表于 2024-12-19 17:27:20

缺少SetWakeUpTime函数体
你的代码中没有while
描述不清楚,代码不完整

qepuemc 发表于 2024-12-19 21:41:21

DebugLab 发表于 2024-12-19 17:27
缺少SetWakeUpTime函数体
你的代码中没有while
描述不清楚,代码不完整


现在用分析仪看这个是可以的。



//低功耗
#include "comm\STC32G.h" //STC官方文件没做修改用的是STC32GLQFP32 32脚的芯片

typedef   unsigned char   u8;
typedef   unsigned int    u16;
typedef   unsigned long   u32;

//休眠时间1
/*
typedef   unsigned char   u8;
typedef   unsigned int    u16;
typedef   unsigned long   u32;
*/
sfr WKTCL = 0xAA;   //唤醒定时器低字节
sfr WKTCH = 0xAB;   //唤醒定时器高字节
void    SetWakeUpTime(unsigned int SetTime);
//休眠时间1

/********************** 主函数 ************************/
void main(void)
{   
       
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度
       

   
       

                //休眠时间2

          P0M1 = 0;   P0M0 = 0;   //设置为准双向口
    P1M1 = 0;   P1M0 = 0;   //设置为准双向口
    P2M1 = 0;   P2M0 = 0;   //设置为准双向口
    P3M1 = 0;   P3M0 = 0;   //设置为准双向口
    P4M1 = 0;   P4M0 = 0;   //设置为准双向口
    P5M1 = 0;   P5M0 = 0;   //设置为准双向口
    P6M1 = 0;   P6M0 = 0;   //设置为准双向口
    P7M1 = 0;   P7M0 = 0;   //设置为准双向口
       
    EA = 1;   //允许总中断
                //休眠时间2
       
    while(1)
    {
                        P20=~P20;
                        //休眠时间3
                        SetWakeUpTime(200);    //2秒后醒来
                        PCON |= 0x02;   //Sleep   
                        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义                       

                       
    }
}

                        //休眠时间4
//========================================================================
// 函数: void   SetWakeUpTime(unsigned int SetTime)
// 描述: 唤醒定时器设置时间值函数。
// 参数: SetTime: 要设置的时间值(睡眠的时间), 单位为ms.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-7-15
// 备注:
//========================================================================
void    SetWakeUpTime(unsigned int SetTime)
{
    SetTime = (u16)((32768UL * (u32)SetTime) / 16000);//重装值 = Fwkt/16 * SetTime/1000 = Fwkt * SetTime / 16000
    if(SetTime > 0) SetTime--;
    WKTCL = (u8)SetTime;
    WKTCH = (u8)(SetTime >> 8) | 0x80;
}
                        //休眠时间4

页: [1]
查看完整版本: 低功耗不循环32G8K64运行空3UA正常6MA只进一次休眠请教怎么再次休眠