STC的片子掉电唤醒问题
在用STC的片子,让它掉电休眠,然后通过外部中断0唤醒,写了个测试程序,但是每次唤醒时都是从函数的while语句开始执行,问什么不从主函数的开头执行呢?手册上说唤醒时,从程序的0000H处开始执行,程序的0000H处不是main函数的开头吗?程序见下面:#include"stc12.h"
#define uchar unsigned char
#define uint unsigned int
sbit d1=P2^0;
sbit d2=P2^1;
uchar count=0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main(void)
{
EA=1; //开总中断 IE.7
EX0=1; //允许外部0中断
IT0=1; //0:低电平触发,1:下降沿触发
d1=0;
delay(1000);
d1=1;
delay(1000);
d1=0;
delay(1000);
d1=1;
delay(1000);
while(1)
{
d2=0;
delay(1000);
d2=1;
delay(1000);
count++;
if(count==4)//d2闪4次进入休眠状态
{
count=0;
PCON=0x02;
}
}
}
每次唤醒时,只有d2灯闪烁(while语句内的),d1不闪;但是按下复位键后,先d1闪,然后d2开始闪,然后进入休眠模式。难道复位后程序从0000H处开始执行,唤醒时不是从0000H处执行? 唤醒是从休眠的地方开始执行吧? 唤醒不是复位, 唤醒是从休眠的地方开始执行! 本帖最后由 lklhzu 于 2012-4-24 11:14 编辑
嗯,对的,之前看错了,休眠时应该保持原I/O和寄存器状态不变的,复位后才从程序0000H处开始执行的。谢谢大家哈!
页:
[1]