從定時(shí)器開(kāi)始說(shuō)中斷
#i nclude "reg51.h"
void initTimer(void)
{
TMOD=0x1;
TH0=0xd8;
TL0=0xf0;
}
void timer0(void) interrupt 1
{
TH0=0xd8;
TL0=0xf0;
//add your code here.
}
void main(void)
{
initTimer();
TR0=1;
ET0=1;
EA=1;
while(1);
}
上面的代碼是12M晶振下定時(shí)10000US的程序,也就是10MS發(fā)生一次中斷。initTimer()是初始化函數(shù),設(shè)置定時(shí)值和中斷的。
10000US在12M晶振下就是100000個(gè)機(jī)器周期了,65536-100000=55536=D8F0(十六進(jìn)制),所以上面就是TH0=0xd8;TL0=0xf0;
void timer0(void) interrupt 1就是定時(shí)器0中斷函數(shù),我們不需要理會(huì)匯編的中斷先,只需要知道當(dāng)中斷來(lái)臨的時(shí)候,程序就自動(dòng)跳到timer0(void)這個(gè)函數(shù)運(yùn)行了,運(yùn)行完后就會(huì)回到原來(lái)中斷處繼續(xù)執(zhí)行原先的程序。
interrupt是C51中的關(guān)鍵字,后面跟有interrupt的函數(shù)都是中斷函數(shù),那么對(duì)應(yīng)哪個(gè)中斷呢?請(qǐng)大家參考:一開(kāi)始為大家介紹的 Keil Software –Cx51 編譯器用戶手冊(cè) 中文完整版,(名字太長(zhǎng)了,以后叫KEIL手冊(cè))的第125頁(yè)。
中斷號(hào) 中斷地址
0 0003H
1 000BH
2 0013H
3 001BH
4 0023H
5 002BH
6 0033H
7 003BH
8 0043H
9 004BH
10 0053H
11 005BH
12 0063H
評(píng)論