当前位置: 首页 > news >正文

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-50000)   //配置T0为50000us中断一次;

//函数功能: 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的中断服务函数,每50000us中断一次;

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();

}

}

http://www.lryc.cn/news/390760.html

相关文章:

  • 互联网应用主流框架整合之SpringCloud微服务治理
  • 超快的 Python 包管理工具「GitHub 热点速览」
  • 网络基础:OSPF 协议
  • 1456.定长子串中元音的最大数目
  • 基于xilinx FPGA的GTX/GTH/GTY位置信息查看方式(如X0Y0在bank几)
  • JAVA小知识30:JAVA多线程篇1,认识多线程与线程安全问题以及解决方案。(万字解析)
  • Python数据分析案例47——笔记本电脑价格影响因素分析
  • 【加密与解密】【09】GPG Client签名流程
  • “2024软博会” 为软件企业提供集展示、交流、合作一站式平台
  • 【Zoom安全解析】深入Zoom的端到端加密机制
  • 7 动态规划
  • .net 快速开发框架开源
  • 《昇思25天学习打卡营第06天|网络构建》
  • 【链表】- 两两交换链表中的节点
  • java设计模式(四)——抽象工厂模式
  • 动物检测yolo格式数据集(水牛 、大象 、犀牛 、斑马四类)
  • 昇思25天学习打卡营第05天 | 数据变换 Transforms
  • Springboot+MySQL 公寓报修管理系统源码
  • jenkins 发布服务到linux服务器
  • Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
  • 防止跨站脚本攻击XSS之Antisamy
  • Python爬虫实战案例——王者荣耀皮肤抓取
  • PyTorch计算机视觉实战:目标检测、图像处理与深度学习
  • 4D 生物打印:将时间维度融入,打造个性化动态组织
  • 银行清算业务功能测试解析
  • CVE-2024-6387漏洞预警:尽快升级OpenSSH
  • 学习整理在php中使用PHPExcel读取excel表列数大于Z时读取不到的解决方案
  • python sklearn机械学习-数据预处理
  • 搜索引擎常用语法
  • 华为智能驾驶方案剖析