單片機(jī)學(xué)習(xí)——中斷函數(shù)(自用)
中斷系統(tǒng)
原理:
執(zhí)行主程序時(shí),如果出現(xiàn)了中斷命令,則先去處理中斷請(qǐng)求,結(jié)束后回歸執(zhí)行主程序。中斷系統(tǒng)使得內(nèi)核具備了應(yīng)對(duì)突發(fā)事件的能力。
51單片機(jī)的中斷系統(tǒng):
外部中斷0:INT0——0x0003
定時(shí)/計(jì)數(shù)器0:TF0——0x000B
外部中斷1:INT1——0x0013
定時(shí)/計(jì)數(shù)器1:TF1——0x001B
串口中斷:R1/T1——0x0023
?
一般情況下,中斷的處理函數(shù)有兩個(gè):中斷初始化函數(shù)和中斷服務(wù)函數(shù),我們一般在初始化函數(shù)中定義觸發(fā)方式和打開(kāi)外部中斷的使能和“總開(kāi)關(guān)”,在中斷服務(wù)函數(shù)中編寫需要執(zhí)行的指令
軟件部分:
#include "reg52.h"
sbit L1=P0^0;
sbit L8=P0^7;//指示燈引腳
void selectHC573()
{
? P2=(P2&0x1f)|0x80;
}//選擇鎖存器
void delay(unsigned int t)
{
?while(t--);
}//延時(shí)函數(shù)控制燈的熄滅
void Working()
{
?L1=0;//燈開(kāi)
?delay(60000);
?L1=1;//燈滅
?delay(60000);
}
//========================
void Int_INT0()//中斷初始化函數(shù)
{
?IT0=1;//選擇下降沿觸發(fā)
?EX0=1;//打開(kāi)外部中斷使能
?EA=1;//打開(kāi)外部中斷總開(kāi)關(guān)
}
void serviceINT0() interrupt 0? //中斷服務(wù)函數(shù)
{
?L8=0;//在中斷命令中打開(kāi)L8燈
?delay(60000);
?delay(60000);
?delay(60000);
?delay(60000);
?L8=1;
}
//==========================
void main()
{
?Int_INT0();
?while(1)
?{
? Working();
?}
}