SMOD:该位与串口通讯有关。
SMOD=0; 串口方法1,2,3时,波特率正常。
SMOD=1; 串口方法1,2,3时,波特率加倍。
GF1,GF0:两个通用作业标志位,用户能够自在运用。
PD:掉电形式设定位。
PD=0 单片机处于正常作业状况。
PD=1 单片机进入掉电(Power Down)形式,可由外部中止或硬件复位形式唤醒,进入掉电形式后,外部晶振停振,CPU、定时器、串行口悉数中止作业,只要外部中止作业。
IDL:闲暇形式设定位。
IDL=0 单片机处于正常作业状况。
IDL=1 单片机进入闲暇(Idle)形式,除CPU不作业外,其他仍持续作业,在闲暇形式下可由任一个中止或硬件复位唤醒。
测验电路图
测验程序如下:
#include
#include
sbit key = P3^3; //进入掉电形式的按键
/*************************************
函数称号:delay
函数功用:延时一段时间
**************************************/
void delay()
{
unsigned int i;
for(i=0;i《30000;i++) ;
}
/*************************************
函数称号:delay20ms
函数功用:延时20ms
**************************************/
void delay20ms(void)
{
unsigned char i,j;
for(i=0;i《100;i++)
for(j=0;j《60;j++);
}
/*************************************
函数称号:init
函数功用:初始化程序
**************************************/
void init()
{
EA=1; //开中止总答应
EX0=1; //开外中止1
IT0=1; //外中止的下降沿触发
}
/*************************************
函数称号:keytest
函数功用:键盘程序,按下键进入掉电形式
**************************************/
void keytest()
{
if(key==0)
{
delay20ms();
if(key==0)
{
PCON=PCON|0x02; //进入掉电形式
}
while(!key);
}
}
/*************************************
函数称号:main
函数功用:主函数
**************************************/
void main()
{unsigned char aa = 0xfe;
init();
while(1)
{//完成流水灯
P0=aa;
aa= _crol_(aa,1);
delay();
keytest(); //键盘扫描
}
}
/*************************************
函数称号:Int0
函数功用:中止服务程序
**************************************/
void Int0() interrupt 0 using 1
{
P0=0x00; //灯全亮
delay();
delay();
delay();
}
试验成果:单片机上电后,能够看到流水灯滚动;当按下key键后流水灯中止,只要一盏灯亮着;当按下接在P3.2口的按键,8盏灯悉数亮了,然后流水灯接着本来的方位活动。并且,掉电后,经过按键触发外部中止唤醒单片机,作用不错,很简单触发。
定论:AT89S52单片机从掉电形式经外部中止触发唤醒后,首要履行的是外部中止服务程序,然后回到主程序中止点方位持续履行。