資源簡介
為了降低系統的功耗,我們經常應用到單片機空閑和掉電模式

代碼片段和文件信息
/************************************************************************
作者:淋哥電子
說明:開啟兩個外部中斷,設置低電平觸發中斷,
??用定時器計數并且顯示在數碼管的前兩位,當計到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
評論
共有 條評論