找回密码
 立即注册
查看: 205|回复: 2

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:420
  • 最近打卡:2025-06-16 07:58:06

46

主题

353

回帖

842

积分

高级会员

积分
842
发表于 2024-12-18 22:15:41 | 显示全部楼层 |阅读模式
			//休眠时间3
		SetWakeUpTime(5000);    //2秒后醒来
		PCON |= 0x02;   //Sleep   
		_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义
		//休眠时间3

上面代码可以进放休眠

放到了while中。

不休眠了就开始运行别的,不过以后再也不会休眠了。求旨教

加了好多的EA=0;也不管用!

EA=0;
							//休眠时间3
			SetWakeUpTime(5000);    //2秒后醒来
				EA=0;
			PCON |= 0x02;   //Sleep   
				EA=0;
			_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义	
			//休眠时间3
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-06-17 09:09:48
已绑定手机

79

主题

5131

回帖

9132

积分

超级版主

DebugLab

积分
9132
发表于 2024-12-19 17:27:20 | 显示全部楼层
缺少SetWakeUpTime函数体
你的代码中没有while
描述不清楚,代码不完整
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:420
  • 最近打卡:2025-06-16 07:58:06

46

主题

353

回帖

842

积分

高级会员

积分
842
发表于 2024-12-19 21:41:21 | 显示全部楼层
Debu*** 发表于 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

回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 15:14 , Processed in 0.140061 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表