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