东北网站建设公司,seo排名优化软件有用,专业网站建设公司排名,荆门网站开发公司电话重点学习51单片机工作在睡眠模式。
1、进入“睡眠模式”的方法
通过将PCON寄存器中的PDWN置1#xff0c;则CPU会进入“睡眠模式”。在“睡眠模式”中,晶振将停止工作#xff0c;因此#xff0c;定时器和串口都将停止工作#xff0c;只有外部中断继续工作。如果单片机电源…重点学习51单片机工作在睡眠模式。
1、进入“睡眠模式”的方法
通过将PCON寄存器中的PDWN置1则CPU会进入“睡眠模式”。在“睡眠模式”中,晶振将停止工作因此定时器和串口都将停止工作只有外部中断继续工作。如果单片机电源引脚VCC有2.0伏以上则RAM 中的数据仍将保存。
退出“睡眠模式”(低功耗模式)有两种方法
1)、外部中断会让CPU退出“睡眠模式”。
2)、CPU复位引脚出现高电平引起CPU复位也会让CPU退出“睡眠模式”。 2、外部中断会让CPU退出“睡眠模式”
程序如下
#define Enter_PDWN_Mode() PCONPCON|0x02 //进入“睡眠模式”
#define Exit_PDWN_Mode() PCON ~0x02; //CPU退出“睡眠模式” sbit LED P1^0; //低电平点亮LED //函数功能:设置int0和int1为下降沿中断方式;
void EXT_int0_and_int1_initialization()
{ IT01; //设置int0为下降沿触发方式; IT11; //设置int1为下降沿触发方式; //IT00; //设置int0为低电平触发方式; //IT10; //设置int1为低电平触发方式; EX01; //允许int0中断; EX11; //允许int1中断; EA1; //开总中断允许位;
} #define OSC_FREQ 12000000L //定义晶振频率为12MHz;
#define T0_Load_Value (65536-50000) //配置T0为50000us中断一次;
//函数功能: Timer0初始化;
void timer0_initializtion(void)
{ TMOD 0xF4; //设置GATE00,即不允许外部INT0脚控制Timer0; TMOD| 0x01; //配置Timer0为方式1(16位定时器); TL0T0_Load_Value; //手动装载初值; TH0T0_Load_Value8; TR01; //当GATE00时,TR01,表示启动T0开始工作; ET01; //允许Timer0中断; EA1; //开总中断允许位;
} //函数功能:int0中断服务函数,在双击P3.2脚时会进入int0中断服务函数;
void int0_interrupt_service_function() interrupt 0
{
LED0;//点灯 Exit_PDWN_Mode();//CPU退出“睡眠模式”
} //函数功能:int1中断服务函数,在双击P3.3脚时会进入int1中断服务函数;
void int1_interrupt_service_function() interrupt 2
{ LED0;//点灯 Exit_PDWN_Mode();//CPU退出“睡眠模式”
} //函数功能: Timer0的中断服务函数,每50000us中断一次;
void timer0_interrupt_program() interrupt 1 using 1
{ TL0T0_Load_Value; //手动装载初值; TH0T0_Load_Value8; LED~LED;
}
} //函数功能:11.0592MHz延时100us
void Delay100us(void)
{
unsigned char i; i 50;
while (i0){i--;}
} void Delay_ms(unsigned char x)
{ unsigned char i;
while (x)
{ for(i0;i10;i)Delay100us();
x--;
}
} void main(void)
{ EXT_int0_and_int1_initialization();
timer0_initializtion(); //Timer0初始化;
LED1;//关灯 Delay_ms(1000);Delay_ms(1000);Delay_ms(1000);
Enter_PDWN_Mode();
//进入“睡眠模式”
//等待外部中断
while(1)
{
Delay100us();
}
}