• 大小: 26KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: 单片机  

资源简介

为了降低系统的功耗,我们经常应用到单片机空闲和掉电模式

资源截图

代码片段和文件信息

/************************************************************************
作者:淋哥电子
说明:开启两个外部中断,设置低电平触发中断,
  用定时器计数并且显示在数码管的前两位,当计到5时,
  使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,
  从空闲(休眠)模式返回,同时开启定时器
************************************************************************/

/*************头文件专区*************/
#include   //单片机52头文件存放着单片机的寄存器

/*************宏定义专区*************/
#define uint unsigned int
#define uchar unsigned char

/*************变量定义专区*************/
uchar code table0[16]={0xc00xf90xa40xb00x990x920x820xf80x800x900x880x830xc60xa10x860x8e}; //数码管字型码
uchar code table1[6]={0xf80xf40xec0xdc0xbc0x7c};  //位选数码管数组
uchar num;//定时计数

/*************函数申明专区*************/
void delay_ms(uint z); //1ms延时
void timer0_init(void); //定时器初始化函数
void EX_init(void);     //外部中断初始化函数  
void display(uchar shiuchar ge); //数码管显示

/********************************
*函数名称:main
*输入:无
*输出:无
*功能说明:主函数
*********************************/
void main(void)
{
uchar num1ab;  //定义局部变量
timer0_init(); //定时器初始化
EX_init();    //外部中断初始化
EA=1;   //开总中断
while(1)
{
if(++num>=100)
{
num=0;
num1++;
if(num1==6)
{
ET0=0;   //关定时器
PCON=0X02; //PD=1进入掉电模式
//或 PCON=0X01;//IDL=1,进入空闲模式
}
a=num1/10;  //十位
b=num1%10;  //个位
}
display(ab);  //显示

}
}

/********************************
*函数名称:delay_ms
*输入:uint z延时时间
*输出:无
*功能说明:毫秒级延时
*********************************/
void delay_ms(uint z)
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}
/********************************
*函数名称:display
*输入:shi 十位,ge 个位
*输出:无
*功能说明:数码管显示计数值
*********************************/
void display(uchar shiuchar ge)
{
P2=table1[1];  //显示位
P0=table0[shi]; //显示百位
delay_ms(3);
P2=table1[0];  //显示位
P0=table0[ge]; //显示百位
   delay_ms(3);
}
/********************************
*函数名称:time0_int
*输入:无
*输出:无
*功能说明:定时器0初始化,50ms
*********************************/
void timer0_init(void)
{
TMOD=0X01; //定时器工作方式设置为,定时器0,方式1
TH0=(65536-50000)/256;  //计数寄存器高8位
TL0=(65536-50000)%256;  //计数寄存器低8位
TR0=1;    //开启定时器0运行
ET0=1;    //开定时器0中断
}
/********************************
*函数名称:EX_init
*输入:无
*输出:无
*功能说明:外部中断初始化
*********************************/
void EX_init(void)
{
EX0=1; //开外部中断0
EX1=1;  //开外部中断1
}
/********************************
*函数名称:EX0_IRQ
*输入:无
*输出:无
*功能说明:外部中断0中断服务程序
*********************************/
void EX0_IRQ(void) interrupt 0
{
PCON=0;//清除之前的掉电(空闲)模式
ET0=1; //开定时器0
}
/********************************
*函数名称:EX1_IRQ
*输入:无
*输出:无
*功能说明:外部中断1中断服务程序
*********************************/
void EX1_IRQ(void) interrupt 2
{
PCON=0; //清除之前的掉电(空闲)模式
ET0=1; //开定时器0
}

/********************************
*函数名称:Time0_IRQ
*输入:无
*输出:无
*功能说明:定时器0中断服务程序
*********************************/
void Time0_IRQ(void) interrupt 1
{
  TH0=(65536-50000)/256;  //计数寄存器高8位重载
TL0=(65536-50000)%256; //计数寄存器低8位

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      38400  2010-03-16 22:04  空闲与掉电\51单片机空闲和掉电模式应用.doc

     文件       5255  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down

     文件       3577  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down.c

     文件        735  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down.hex

     文件         68  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down.lnp

     文件       7360  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down.LST

     文件       9548  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down.M51

     文件       5574  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\Power-down.OBJ

     文件       3637  2010-03-16 20:48  空闲与掉电\空闲与掉电—程序\Power-down.plg

     文件          0  2010-03-16 20:48  空闲与掉电\空闲与掉电—程序\Power-down.uv2

     文件       6376  2005-03-22 15:22  空闲与掉电\空闲与掉电—程序\STARTUP.A51

     文件      14048  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\STARTUP.LST

     文件        758  2010-03-16 22:01  空闲与掉电\空闲与掉电—程序\STARTUP.OBJ

     目录          0  2010-03-16 22:10  空闲与掉电\空闲与掉电—程序

     目录          0  2010-04-23 12:07  空闲与掉电

----------- ---------  ---------- -----  ----

                95336                    15


评论

共有 条评论