從定時(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í)值和中斷的。
10000US在12M晶振下就是100000個(gè)機器周期了,65536-100000=55536=D8F0(十六進(jìn)制),所以上面就是TH0=0xd8;TL0=0xf0;
void timer0(void) interrupt 1就是定時(shí)器0中斷函數,我們不需要理會(huì )匯編的中斷先,只需要知道當中斷來(lái)臨的時(shí)候,程序就自動(dòng)跳到timer0(void)這個(gè)函數運行了,運行完后就會(huì )回到原來(lái)中斷處繼續執行原先的程序。
interrupt是C51中的關(guān)鍵字,后面跟有interrupt的函數都是中斷函數,那么對應哪個(gè)中斷呢?請大家參考:一開(kāi)始為大家介紹的 Keil Software –Cx51 編譯器用戶(hù)手冊 中文完整版,(名字太長(cháng)了,以后叫KEIL手冊)的第125頁(yè)。
中斷號 中斷地址
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
評論