低功耗不循环32G8K64运行空3UA正常6MA只进一次休眠请教怎么再次休眠
<pre><code> //休眠时间3SetWakeUpTime(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>
缺少SetWakeUpTime函数体
你的代码中没有while
描述不清楚,代码不完整 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]