C51中斷處理過程
3 C51中斷處理過程
C51編譯器支持在C源程序中直接開發(fā)中斷過程,因此減輕了使用匯編語言的繁瑣工作,提高了開發(fā)效率。中斷服務函數(shù)的完整語法如下:
void 函數(shù)名(void)[模式] [再入]interrupt n [using r]
其中n(0~31)代表中斷號。C51編譯器允許32個中斷,具體使用哪個中斷由80C51系列的芯片決定。r(0~3)代表第r組寄存器。在調(diào)用中斷函數(shù)時,要求中斷過程調(diào)用的函數(shù)所使用的寄存器組必須與其相同。"再入"用于說明中斷處理函數(shù)有無"再入"能力。C51編譯器及其對C語言的擴充允許編程者對中斷所有方面的控制和寄存器組的使用。這種支持能使編程者創(chuàng)建高效的中斷服務程序,用戶只須在C語言下關心中斷和必要的寄存器組切換操作。
例3 設單片機的fosc=12MHz,要求用T0的方式1編程,在P1.0腳輸出周期為2ms的方波。
例3 設單片機的fosc=12MHz,要求用T0的方式1編程,在P1.0腳輸出周期為2ms的方波。
用C語言編寫的中斷服務程序如下:
#include sbit P1_0=P1^0; void timer0(void)interrupt 1 using 1 { /*T0中斷服務程序入口*/ P1_0=!P1_0; TH0=-(1000/256); /*計數(shù)初值重裝*/ TL0=-(1000%256); } void main(void) { TMOD=0x01; /*T0工作在定時器方式1*/ P1_0=0; TH0=-(1000/256); /*預置計數(shù)初值*/ TL0=-(1000%256); EA=1; /*CPU開中斷*/ ET0=1; /*T0開中斷*/ TR0=1; /*啟動T0*/ do{}while(1); }
在編寫中斷服務程序時必須注意不能進行參數(shù)傳遞,不能有返回值。 |