首先你要寫中斷函數(shù)
景德鎮(zhèn)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,景德鎮(zhèn)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為景德鎮(zhèn)上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的景德鎮(zhèn)做網(wǎng)站的公司定做!
然后在主程序中像調(diào)用子函數(shù)一樣調(diào)用就可以了
舉個(gè)例子吧
#define uchar unsigned char
#define uchar unsigned char
sbit D1=P1^0;
uchar aa;
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(aa==20)
{
D1=~D1;
aa=0;
}
}
}
void T0time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
1.void(中斷函數(shù)返回類型(空型)) Time1 (中斷函數(shù)名)(void(參數(shù)類型) interrupt 3 (中斷號(hào))
2: 中斷條件發(fā)生時(shí)執(zhí)行中斷,比如void Time1(void) interrupt 3 是定時(shí)器1定時(shí)時(shí)間到發(fā)生中斷,中斷函數(shù)放在那里無所謂
3:void PxInt0(void) interrupt 0 中斷名為PxInt0的0號(hào)中斷
void PxInt1(void) interrupt 2 中斷名為PxInt1的2號(hào)中斷
void time0_int(void) interrupt 1 中斷名為time0_int的1號(hào)中斷
void time1_int(void) interrupt 3 中斷名為time1_int的3號(hào)中斷
4:中斷的代碼是你想中斷執(zhí)行的工作,中斷的代碼是根據(jù)任務(wù),需要你自己寫的
對(duì)于C51單片機(jī),其內(nèi)部總共有五級(jí)中斷源
分別為外部中斷0、定時(shí)器0、外部中斷1、定時(shí)器1及串行中斷。
C51單片機(jī)的中斷使用時(shí),主要是通過中斷服務(wù)號(hào)來決定的。
如你定義一個(gè)中斷服務(wù)函數(shù):
void KEY(void) intterrupt 0
{
}
當(dāng)外部中斷0申請(qǐng)中斷時(shí)
會(huì)自動(dòng)根據(jù)interrupt后面的0,找到上面定義的這個(gè)中斷服務(wù)函數(shù)。
對(duì)于其他四個(gè)中斷源,其對(duì)應(yīng)的中斷號(hào)分別為1、2 、3、4
c51中斷函數(shù)的介紹
C51編譯器允許用c51創(chuàng)建中斷服務(wù)程序,大家僅僅需要關(guān)心中斷號(hào)和寄存器組的選擇就可以了。編譯器自動(dòng)產(chǎn)生中斷向量和程序的入棧及出棧代碼。在函數(shù)聲明時(shí)包括interrupt,將把所聲明的函數(shù)定義為一個(gè)中斷服務(wù)程序。另外,可以用using定義此中斷服務(wù)程序所使用的寄存器組。
一、中斷函數(shù)的定義
1、中斷函數(shù)定義的格式為:
函數(shù)類型 函數(shù)名 interrupt n using n
其中:
Interrupt后面的n是中斷號(hào)。
關(guān)鍵字using后面的n是所選擇的寄存器組,取值范圍是0-3.
定義中斷函數(shù)時(shí),using是一個(gè)選項(xiàng),可以省略不用。如果不用則由編譯器選擇一個(gè)寄存器組作為絕對(duì)寄存器組。
2、8051的中斷過程通過使用interrupt關(guān)鍵字和中斷號(hào)來實(shí)現(xiàn),中斷號(hào)告訴編譯器中斷程序的入口地址。中斷號(hào)對(duì)應(yīng)著IE寄存器中的使能位,換句話說,IE寄存器中的0位對(duì)應(yīng)著外部中斷0,相應(yīng)的外部中斷0的中斷號(hào)是0.
IE寄存器中的使能位與外部中斷對(duì)應(yīng)關(guān)系:
中斷號(hào) 中斷源
0 外部中斷0
1 定時(shí)器0
2 外部中斷1
3 定時(shí)器1中斷
4 串行口中斷
5 定時(shí)器2中斷
二、使用中斷函數(shù)時(shí)要注意的問題:
1. 在設(shè)計(jì)中斷時(shí),要注意的是哪些功能應(yīng)該放在中斷程序中,哪些功能應(yīng)該放在主程序中。一般來說中斷服務(wù)程序應(yīng)該做最少量的工作,這樣做有很多好處。首先系統(tǒng)對(duì)中斷的反應(yīng)面更寬了,有些系統(tǒng)如果丟失中斷或?qū)χ袛喾磻?yīng)太慢將產(chǎn)生十分嚴(yán)重的后果,這時(shí)有充足的時(shí)間等待中斷是十分重要的。其次它可使中斷服務(wù)程序的結(jié)構(gòu)簡(jiǎn)單,不容易出錯(cuò)。
中斷程序中放入的東西越多,他們之間越容易起沖突。簡(jiǎn)化中斷服務(wù)程序意味著軟件中將有更多的代碼段,但可把這些都放入主程序中。中斷服務(wù)程序的設(shè)計(jì)對(duì)系統(tǒng)的成敗有至關(guān)重要的作用,要仔細(xì)考慮各中斷之間的關(guān)系和每個(gè)中斷執(zhí)行的時(shí)間,特別要注意那些對(duì)同一個(gè)數(shù)據(jù)進(jìn)行操作的ISR.
2. 中斷函數(shù)不能傳遞參數(shù)。
3. 中斷函數(shù)沒有返回值。
4. 中斷函數(shù)調(diào)用其他函數(shù),則要保證使用相同的寄存器組,否則出錯(cuò)。
5. 中斷函數(shù)使用浮點(diǎn)運(yùn)算要保存浮點(diǎn)寄存器的狀態(tài)。
中斷大概是這樣的。。。如果有點(diǎn)錯(cuò)誤不要怪我。。。我以前作過鼠標(biāo)中斷的東西?!,F(xiàn)在有些想不起來了。。。所以。。。呵呵呵。。。
當(dāng)程序運(yùn)行到中斷條件的時(shí)候,會(huì)向CPU發(fā)信號(hào)改變優(yōu)先級(jí)(原先運(yùn)行的東西會(huì)放進(jìn)哪個(gè)特定的地方的,作保存),以發(fā)出中斷的那段程序作為最高優(yōu)先,執(zhí)行完成后再由執(zhí)行另外的。。。建議你去看看匯編。。。哈哈哈。。。我沒學(xué)過的。。。
C中實(shí)現(xiàn)中斷是用了一個(gè)函數(shù):geninterrupt(...)
這個(gè)“...”是個(gè)16進(jìn)制的數(shù)字,是中斷號(hào),像鼠標(biāo)中斷號(hào)就是0x33
還要用到類似匯編里寄存器模樣的變量:如_AX,_BX,_CX,_DX...不同的值功能不同。。。哎呀,我都忘完了。。。建議去查下geninterrupt()的用法就OK了。。。
形式如下:
void 中斷名(void) inerrupt 中斷號(hào) using 工作寄存器組
比如外部中斷0
void ext0(void) interrupt 0 using 1 //后面的using 1可以省略,缺省為0
定時(shí)器1
void t1isr() interrupt 3
擴(kuò)展資料:
單片機(jī)內(nèi)部結(jié)構(gòu)
1、CPU
它的名字沒有改,還是稱為CPU(Central Processing Unit)。它是單片機(jī)的核心部件,包括運(yùn)算器和控制器。
運(yùn)算器既是算術(shù)邏輯單元ALU(Arithmetic logic Unit),其功能是進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算。
控制器一般由指令寄存器、指令譯碼器、時(shí)序電路和控制電路組成。其作用是完成取指令、將指令譯碼形成各種微操作并執(zhí)行指令,同時(shí)控制計(jì)算機(jī)的各個(gè)部件有條不紊地工作。
2、單片機(jī)內(nèi)部結(jié)構(gòu)之一ROM
“硬盤”,改了名字,稱為程序存儲(chǔ)器,也叫只讀存儲(chǔ)器。用ROM(Read only memery)表示。其作用和計(jì)算機(jī)的硬盤差不多,用來存放用戶編寫的程序。特點(diǎn)是:掉電后不會(huì)丟失數(shù)據(jù)(程序)。