专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
关于PIC单片机的“休眠”和“唤醒”
2020-02-06 10:13
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
5203
24
24
关于PIC单片机的“休眠”和“唤醒”自己还是不太会用。希望各位大虾能给点指导。
现在主要是用PIC12F635单片机。用其中一个引脚GP0做为按键输入,其中一个引脚GP4作为输出。要达到的效果就是:平时都是“休眠”状态,当有按键按下时,单片机立即“唤醒”,GP4开始发出某段波形。就是想问一问这“休眠”与“唤醒”,具体怎么设置,希望有朋友写一小段用C的休眠和唤醒程序。让我能入个门。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
cwl0580
2020-02-07 12:02
今天做了实验,发现休眠后RAM数据无法保存,也就是说所有变量都被清零了,静态全局变量也一样被清零!
“millwood0”和 “rainyss ”请看一下我的程序,看是不是程序问题!?
/////////////////////////////////////////////////////////////////////////////////////////////////
#include <pic.h>
#define uchar unsigned char
#define Weak_up GP3 //I
#define LED GP0 //o
//__CONFIG(0x06);//内部4M晶振,代码保护开,WDT开
__CONFIG(0x02);//内部4M晶振,代码保护开,WDT 0ff
//////////////////////////////////////////////////////////////////////////////////////////////////////////
static bit POWER_flag;//开关机标记
static uchar Sleep_count;//休眠延时
//////////////////////////////////////////////////////////////////////////
////////////////////初始化程序//////////////////////////////////////////////
void Init(void)//初始化程序
{
OPTION = 0x00;//T0分频:2;上拉开,唤醒开
TRIS = 0x3E;//设置IO口方向3E:111110
CM1CON0 = 0xF7;//电压比较器关
ADCON0=0x00; //AD关
if(PD)//如果是上电复位
{
GPIO = 0x00;//输出口清零
POWER_flag=1;//开机
//LED=POWER_flag;//上电led亮
LED=1;//上电led亮
}
else//如果不是上电复位
{
if(GPWUF)//如果是电平变化唤醒
{
GPWUF = 0; //清除唤醒标志
Sleep_count=255;//休眠延时计数赋值
POWER_flag=!POWER_flag;//开关机标记取反
//LED=POWER_flag;//LED无法取反,一直亮,所以我认为无论什么复位,POWER_flag每次都被清零了
LED=!LED;//LED状态正常取反
}
}
}
void main() //主程序
{
Init(); //初始化
while (1) //主循环
{
if(Sleep_count)//进入休眠延时
Sleep_count--;
else//进入休眠
{
if(Weak_up) //进入休眠前读端口,这点很重要,否则不正常
asm("sleep"); //休眠
}
}
}
加载中...
查看其它24个回答
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
“millwood0”和 “rainyss ”请看一下我的程序,看是不是程序问题!?
/////////////////////////////////////////////////////////////////////////////////////////////////
#include <pic.h>
#define uchar unsigned char
#define Weak_up GP3 //I
#define LED GP0 //o
//__CONFIG(0x06);//内部4M晶振,代码保护开,WDT开
__CONFIG(0x02);//内部4M晶振,代码保护开,WDT 0ff
//////////////////////////////////////////////////////////////////////////////////////////////////////////
static bit POWER_flag;//开关机标记
static uchar Sleep_count;//休眠延时
//////////////////////////////////////////////////////////////////////////
////////////////////初始化程序//////////////////////////////////////////////
void Init(void)//初始化程序
{
OPTION = 0x00;//T0分频:2;上拉开,唤醒开
TRIS = 0x3E;//设置IO口方向3E:111110
CM1CON0 = 0xF7;//电压比较器关
ADCON0=0x00; //AD关
if(PD)//如果是上电复位
{
GPIO = 0x00;//输出口清零
POWER_flag=1;//开机
//LED=POWER_flag;//上电led亮
LED=1;//上电led亮
}
else//如果不是上电复位
{
if(GPWUF)//如果是电平变化唤醒
{
GPWUF = 0; //清除唤醒标志
Sleep_count=255;//休眠延时计数赋值
POWER_flag=!POWER_flag;//开关机标记取反
//LED=POWER_flag;//LED无法取反,一直亮,所以我认为无论什么复位,POWER_flag每次都被清零了
LED=!LED;//LED状态正常取反
}
}
}
void main() //主程序
{
Init(); //初始化
while (1) //主循环
{
if(Sleep_count)//进入休眠延时
Sleep_count--;
else//进入休眠
{
if(Weak_up) //进入休眠前读端口,这点很重要,否则不正常
asm("sleep"); //休眠
}
}
}
一周热门 更多>