51单片机第27步_单片机工作在睡眠模式

重点学习51单片机工作在睡眠模式。

1、进入"睡眠模式"的方法

通过将PCON寄存器中的PDWN置1,则CPU会进入"睡眠模式"。在"睡眠模式"中,晶振将停止工作,因此,定时器和串口都将停止工作,只有外部中断继续工作。如果单片机电源引脚VCC有2.0伏以上,则RAM 中的数据仍将保存。

退出"睡眠模式"(低功耗模式),有两种方法:

1)、外部中断会让CPU退出"睡眠模式"。

2)、CPU复位引脚出现高电平,引起CPU复位,也会让CPU退出"睡眠模式"。

2、外部中断会让CPU退出"睡眠模式"

程序如下:

#define Enter_PDWN_Mode() PCON=PCON|0x02 //进入"睡眠模式"

#define Exit_PDWN_Mode() PCON &= ~0x02; //CPU退出"睡眠模式"

sbit LED = P1^0; //低电平点亮LED

//函数功能:设置int0和int1为下降沿中断方式;

void EXT_int0_and_int1_initialization()

{ IT0=1; //设置int0为下降沿触发方式;

IT1=1; //设置int1为下降沿触发方式;

//IT0=0; //设置int0为低电平触发方式;

//IT1=0; //设置int1为低电平触发方式;

EX0=1; //允许int0中断;

EX1=1; //允许int1中断;

EA=1; //开总中断允许位;

}

#define OSC_FREQ 12000000L //定义晶振频率为12MHz;

#define T0_Load_Value ( 65536- 50 00 0) //配置T0为 500 00us中断一次;

//函数功能: Timer0初始化;

void timer0_initializtion( void )

{ TMOD&= 0xF4; //设置GATE0=0,即不允许外部INT0脚控制Timer0;

TMOD|= 0x01; //配置Timer0为方式1(16位定时器);

TL0=T0_Load_Value; //手动装载初值;

TH0=T0_Load_Value>>8;

TR0=1; //当GATE0=0时,TR0=1,表示启动T0开始工作;

ET0=1; //允许Timer0中断;

EA=1; //开总中断允许位;

}

//函数功能:int0中断服务函数,在双击P3.2脚时会进入int0中断服务函数;

void int0_interrupt_service_function() interrupt 0

{

LED =0; //点灯

Exit_PDWN_Mode();//CPU退出"睡眠模式"

}

//函数功能:int1中断服务函数,在双击P3.3脚时会进入int1中断服务函数;

void int1_interrupt_service_function() interrupt 2

{

LED =0; //点灯

Exit_PDWN_Mode();//CPU退出"睡眠模式"

}

//函数功能: Timer0的中断服务函数,每 500 00us中断一次;

void timer0_interrupt_program() interrupt 1 using 1

{ TL0=T0_Load_Value; //手动装载初值;

TH0=T0_Load_Value>>8;

LED=~LED;

}

}

//函数功能:11.0592MHz延时100us

void Delay100us(void)

{

unsigned char i;

i = 50;

while (i>0){i--;}

}

void Delay_ms(unsigned char x)

{

unsigned char i;

while (x)

{

for(i=0;i<10;i++)Delay100us();

x--;

}

}

void main( void )

{

EXT_int0_and_int1_initialization();

timer0_initializtion(); //Timer0初始化;

LED =1; //关灯

Delay_ms****(1000);**** Delay_ms****(1000);**** Delay_ms****(1000);****

Enter_PDWN_Mode****();****

// 进入"睡眠模式"

//等 外部中断

while (1)

{

Delay100us();

}

}

相关推荐
Zevalin爱灰灰38 分钟前
编程技巧(基于STM32)第一章 定时器实现非阻塞式程序——按键控制LED灯闪烁模式
stm32·单片机·嵌入式硬件
红花与香菇2____2 小时前
【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
笔记·嵌入式硬件·学习·pcb设计·cadence·pcb工艺
Jerry.yl3 小时前
关于 BK3633 上电时受串口 UART2 影响而无法启动的问题说明
嵌入式硬件·物联网·bk3633
苏慕TRYACE4 小时前
RT-Thread+STM32L475VET6实现红外遥控实验
stm32·单片机·嵌入式硬件·rt-thread
小幽余生不加糖5 小时前
deepseek帮我设计物理量采集单片机口保护电路方案
单片机·嵌入式硬件
Ronin-Lotus7 小时前
蓝桥杯篇---IAP15F2K61S2串口
单片机·嵌入式硬件·职场和发展·蓝桥杯·c·iap15f2k61s2
xiaohai@Linux7 小时前
ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)
c语言·嵌入式硬件·tcp/ip·wifi·esp32
yyqzjw8 小时前
【STM32】外部时钟|红外反射光电开关
stm32·单片机·嵌入式硬件
charlie1145141918 小时前
(萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
c语言·stm32·单片机·嵌入式硬件·学习·教程
苏慕TRYACE8 小时前
RT-Thread+STM32L475VET6——ADC采集电压
stm32·单片机·嵌入式硬件·rt-thread