标题:
我这个程序为什么不能把单片机从掉电状态模式中唤醒呀
[打印本页]
作者:
创造生活
时间:
2021-11-14 13:36
标题:
我这个程序为什么不能把单片机从掉电状态模式中唤醒呀
各位大神大家好,今天从网上找了一个例子,功能是开机小灯流水闪烁,按下P3.3,单片机进入掉电模式,只有一个小灯常亮,松开P3.3,按下P3.2进入中断函数,单片机被唤醒,P1口小灯全亮一下,然后继续闪烁。 可是功能却无法实现,单片机无法被唤醒请大神指点一下,将感激不尽!
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit key=P3^3; //按键按下进入掉电模式
void delay() //延时程序函数
{ unsigned int i;
for(i=0;i<30000;i++);
}
void delay20ms() //防抖延时程序函数
{ uchar i,j;
for(i=0;i<100;i++ )
for(j=0;j<60;j++);
}
void init() //中断0初始化函数
{EA=1;
EX0=1;
IT0=1;
}
/*按键检测函数,按键按下单片机进入掉电模式*/
void keytest()
{ if(key==0)
{delay20ms();
if(key==0)
{PCON=PCON|0X02;
}
while(!key);
}
}
void main()
{ uchar aa=0XFE;
init();
while(1)
{
P1=aa;
aa=_crol_(aa,1);
delay();
keytest();
}
}
/*中断函数,退出掉电模式*/
void int0() interrupt 0 using 1
{
PCON=0X00;
delay();
delay();
delay();
P1=0X00;
delay();
delay();
delay();
复制代码
作者:
188610329
时间:
2021-11-14 16:47
几个问题,
1) 中断不全, 没有} 结束, 理论上编译都通不过。
2) 你用的 reg51.h 所以无法判断你的单片机型号,只能当你是AT89C51 或 STC89C51,那是不支持掉电唤醒的。所以,根据你的芯片手册,确认你的单片机究竟能否掉电唤醒,以及正确的掉电和唤醒方式。
3)中断函数中P1 = 0x00; 假定,这是全亮的话,之后,你的程序里面,你再怎么左移右移,灯都是全亮状态,不会再发生任何变化。
作者:
188610329
时间:
2021-11-15 13:37
188610329 发表于 2021-11-14 16:47
几个问题,
1) 中断不全, 没有} 结束, 理论上编译都通不过。
2) 你用的 reg51.h 所以无法判断你的单 ...
这几天正好在重温以前写的代码,这里我自我纠正一下, STC89C51不是不能断电唤醒,而是断电唤醒必须要用:
IT0 = 0;
你如果是89C51的话, IT0 = 1; 是永远唤不醒的。
作者:
创造生活
时间:
2021-11-16 13:56
多谢大神的指点万分感激!我在网上也终于找到了AT89C51的资料,原来是搜素关键词搞得不对,原先搜AT89C51中文手册我找不到资料,搜at89C51中文资料就找到了,现在我最终目的是实现了,单片机能设定掉电模式和唤醒单片机了 ,在此感激大神的指点!!!!!!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1