lklhzu 发表于 2012-4-24 10:48:15

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处执行?

ourdev850725 发表于 2012-4-24 10:58:19

唤醒是从休眠的地方开始执行吧?

uzufk 发表于 2012-4-24 11:05:54

唤醒不是复位, 唤醒是从休眠的地方开始执行!

lklhzu 发表于 2012-4-24 11:13:04

本帖最后由 lklhzu 于 2012-4-24 11:14 编辑


嗯,对的,之前看错了,休眠时应该保持原I/O和寄存器状态不变的,复位后才从程序0000H处开始执行的。谢谢大家哈!
页: [1]
查看完整版本: STC的片子掉电唤醒问题