?? ex10-3.c
字號:
#include "stc12c5a.h"
#include "intrins.h"
sbit Begin_Led = P1^2; //系統(tǒng)開始工作指示燈
unsigned char Is_Power_Down = 0; //判斷是否進入掉電模式標志
sbit Is_Power_Down_Led_INT0 = P1^7; //掉電喚醒指示燈,在INT0中
sbit Not_Power_Down_Led_INT0 = P1^6; //不是掉電喚醒指示燈,在INT0中
sbit Is_Power_Down_Led_INT1 = P1^5; //掉電喚醒指示燈,在INT1中
sbit Not_Power_Down_Led_INT1 = P1^4; //不是掉電喚醒指示燈,在INT1中
sbit Power_Down_Wakeup_Pin_INT0 = P3^2; //掉電喚醒管腳,INT0
sbit Power_Down_Wakeup_Pin_INT1 = P3^3; //掉電喚醒管腳,INT1
sbit Normal_Work_Flashing_Led = P1^3; //系統(tǒng)處于正常工作狀態(tài)指示燈
void Normal_Work_Flashing(void);
void INT_System_init(void);
void INT0_Routine(void);
void INT1_Routine(void);
void main(void)
{
unsigned char j=0;
unsigned char wakeup_counter = 0; //中斷喚醒次數(shù)變量初始為0
Begin_Led = 0; //系統(tǒng)開始工作指示燈
INT_System_init(); //中斷系統(tǒng)初始化
while(1)
{
P2 = ~wakeup_counter; //中斷喚醒次數(shù)顯示,先將wakeup_counter取反
wakeup_counter++; //中斷喚醒次數(shù)顯示
for(j=0;j<2;j++)
Normal_Work_Flashing(); //系統(tǒng)正常工作指示燈
Is_Power_Down = 1; //進入掉電模式之前,將其置為1,以供判斷
PCON = 0x02; //執(zhí)行完此句,單片機進入掉電模式,外部時鐘停止振蕩
_nop_();
//外部中斷喚醒后,首先執(zhí)行上句,然后才會進入中斷服務程序
_nop_(); //建議多加幾個空操作指令NOP,以便觀察
_nop_(); //建議多加幾個空操作指令NOP
}
}
void INT_System_init(void) //中斷系統(tǒng)初始化
{
IT0 = 0; //外部中斷0,低電平觸發(fā)中斷
EX0 = 1; //允許外部中斷0 中斷
IT1 = 1; //外部中斷 1,下降沿觸發(fā)中斷
EX1 = 1; //允許外部中斷1中斷
EA = 1; //開總中斷控制位
}
void INT0_Routine(void) interrupt 0 //外部中斷0服務程序
{
if(Is_Power_Down) //判斷掉電喚醒標志
{
Is_Power_Down = 0;
Is_Power_Down_Led_INT0 = 0; //點亮外部中斷0掉電喚醒指示燈
while(Power_Down_Wakeup_Pin_INT0==0); //等待變高
Is_Power_Down_Led_INT0 = 1; //關(guān)閉外部中斷0掉電喚醒指示燈
}
else
{
Not_Power_Down_Led_INT0 = 0; //點亮外部中斷0正常工作中斷指示燈
while(Power_Down_Wakeup_Pin_INT0==0); //等待變高
Not_Power_Down_Led_INT0 = 1; //關(guān)閉外部中斷0正常工作中斷指示燈
}
}
void INT1_Routine(void) interrupt 2 //外部中斷1服務程序
{
if(Is_Power_Down) //判斷掉電喚醒標志
{
Is_Power_Down = 0;
Is_Power_Down_Led_INT1 = 0; //點亮外部中斷1掉電喚醒指示燈
while(Power_Down_Wakeup_Pin_INT1==0); //等待變高
Is_Power_Down_Led_INT1 = 1; //關(guān)閉外部中斷1掉電喚醒指示燈
}
else
{
Not_Power_Down_Led_INT1 = 0; //點亮外部中斷1正常工作中斷指示燈
while(Power_Down_Wakeup_Pin_INT1==0); //等待變高
Not_Power_Down_Led_INT1 = 1; //關(guān)閉外部中斷1正常工作中斷指示燈
}
}
void delay(void)
{
unsigned int j,k;
for(k=0;k<2;++k)
{
for(j=0;j<=30000;++j)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void Normal_Work_Flashing(void)
{
Normal_Work_Flashing_Led = 0;
delay();
Normal_Work_Flashing_Led = 1;
delay();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -