第六周 睡眠CPU 电源管理特殊功能寄存器 PCON

简介: 第六周 睡眠CPU 电源管理特殊功能寄存器 PCON

电源管理特殊功能寄存器 PCON


介绍:

CMOS 型的MCS-51单片机 具有空闲和掉电两种低功耗方式,其中空闲状态也称作cpu睡眠状态


PCON 字节地址是0x87


有6个功能位:SMOD X X X GF1 GF0 PD IDL


SMOD:波特率加倍位

GF1,GF0:通用标志位

PD,IDL:低功耗工作方式选择控制位


PD

PD

单片机状态

特点

0

0

正常工作状态

cpu正常工作

0

1

空闲状态(cpu睡眠状态)

cpu停止工作睡眠,其他都正常

1

0

掉电方式

其他都停止工作,变量,特殊功能寄存器值不变,P0-P3口输出状态不变


注意点:


1.单片机复位后为0x00,单片机处于正常工作

2.PCON的位是无位状态,不能用位访问方式将PCON某个位置1或0清0,只能用按位操作置1,清0或者取反


睡眠cpu:PCON = PCON|0X01 或者 PCON |=0X01

掉电状态:PCON = PCON|0X02 或者 PCON |=0X02


最好不要用赋值等号,可能会导致串行口不正常


解除方法:不能使用软件解除,只能依赖硬件


(1)解决掉电方式-》硬件复位 //全部初始化

(2)退出空闲状态方式-》1.用中断唤醒cpu 2.复位单片机


代码实现: 进入cpu睡眠方式


1.查询方式


//任务7  睡眠CPU(查询方式)
#include  <reg51.h>    //1 将特殊功能寄存器定义头文件reg51.h包含至本程序中
#define uchar unsigned  char  //2 宏定义:uchar代表unsigned  char
#define ledport P2      //3 宏定义:ledport代表P2
uchar idata keycnt;    //4 在idata区定义全局变量keycnt(按键计数器)
void  main(void)      //5 main函数
{ keycnt=0;      //6 按键计数器初始化:初值为0
  IT0=1;        //7 外部中断0的触发方式为下降沿触发
  while(1)      //8 while死循环,语句9~14是while的循环体
  { if(IE0)      //9 有键按下吗? 
  { IE0=0;      //10 IE0位清0。
    keycnt++;    //11 按键计数值加1
  }       //12 if语句块结束
  ledport=~keycnt;    //13 计数值按位取反后送led控制口显示
//------------------相对任务6查询方式增加的语句-------------------
  PCON|=0x01;     //14 睡眠CPU
//-----------------------------------------------------------------
  }        //15 while循环体结束
}         //16 main函数结束


2.中断方式


//任务7  睡眠CPU(中断方式)
#include  <reg51.h>    //1 包含特殊功能寄存器定义头文件reg51.h
#define ledport P2      //2 宏定义:ledport代表P2(发光二极管接P2口)
#define uchar unsigned  char  //3 宏定义:uchar代表unsigned  char
uchar idata keycnt;    //4 定义全局变量,keycnt在中断服务函数和main中均可使
void  count() interrupt 0 using 1//5 定义中断服务函数:中断号为0,用第1组寄存器组
{ keycnt++;      //6 按键计数值加1
  ledport=~keycnt;    //7 按键计数值送led口显示
}         //8 中断服务函数结束
void  main(void)    //9 main函数
{ keycnt=0;      //10 按键计数值初始化:赋初值0
  IT0=1;        //11 设置外部中断0的触发方式:下降沿触发
  EX0=1;        //12 开外部中断0
  EA=1;       //13 开全局中断
  while(1);      //14 死循环,语句15为循环体
//------------------相对任务6中断方式增加的语句------------------
  { PCON|=0x01; }    //15 睡眠CPU
//----------------------------------------------------------------
}         //16 main函数结束


c51中的存储类型


code :程序存储区(64KB),


data :可直接寻址的内部数据存储区(128B)


idata:不可直接寻址的内部数据存储区(256B)


bdata:可位寻址内部数据存储区(16B)


xdata:外部数据存储区(64KB)


pdata:分页的外部数据存储区


相关文章
|
6月前
|
监控 Python
【python】实现cpu/内存监控的功能(非常简单)
【python】实现cpu/内存监控的功能(非常简单)
西门子S7-1200有什么功能特点?应用范围有哪些?CPU型号及模块类型有哪些?
S7-1200是西门子公司新推出的一款面向离散自动化系统和独立自动化系统的低端PLC。S7-1200采用了模块化设计,具备强大的工艺功能,适用于多种场合,可以满足不同的自动化需求。
西门子S7-1200有什么功能特点?应用范围有哪些?CPU型号及模块类型有哪些?
|
6月前
|
存储 Ruby 内存技术
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
239 1
|
监控 Python
【python】实现cpu/内存监控的功能(非常简单)
【python】实现cpu/内存监控的功能(非常简单)
540 0
|
人工智能 Java Android开发
全面了解CPU Profiler:解读CPU性能分析工具的核心功能与用法
**==Traceview==** 是一个用于分析应用程序性能的工具,用来分析函数调用过程。 **==CPU Profiler==** 是 集成在Android Studio 3.2版本之后的Android Profiler工具当中,实时记录展示 App cpu消耗,用来替代Traceview。
|
缓存
CPU、处理器、内存、外存、寄存器、缓存的区别
CPU、处理器、内存、外存、寄存器、缓存的区别
1438 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第九章:多功能运算电路
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第九章:多功能运算电路
202 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第九章:多功能运算电路
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第六章:移位寄存器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第六章:移位寄存器
157 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器
125 0
|
Linux 测试技术 虚拟化
重大升级!英特尔 CPU 内购功能 (SDSI)已添加至 Linux 5.18 内核中
重大升级!英特尔 CPU 内购功能 (SDSI)已添加至 Linux 5.18 内核中
184 0
重大升级!英特尔 CPU 内购功能 (SDSI)已添加至 Linux 5.18 内核中