|
問題:單片機中斷中void time0() interrupt 1 using 1
中斷函數(shù)類型void,說明中斷函數(shù)是不能有返回值的,這點要明確,所以不要企圖讓中斷函數(shù)給你個返回值。還有,函數(shù)名后面括弧內(nèi)是沒有參數(shù)的。。。這點也需要注意,中斷函數(shù)不能傳遞參數(shù)。interrupt 后面的點是中斷號。重點我給你解釋下using。這是C51編譯器擴展的關(guān)鍵字。用來選擇80c51單片機中不同的寄存器組,你也知道R0-R7總共有4 組,那么using 后面的數(shù)字也就是0-3范圍里的一個數(shù)了。如果不需要using的話,編譯器會自動選擇一組寄存器作為絕對寄存器訪問的。using對代碼是有一定的影響的。給你說個簡單的例子,你可以想下,如果定義 void time0() interrupt 1 using 1假設(shè),我們又在中斷里調(diào)用了一個delay();這個delay是起延時作用。那么,我們就需要確保我們使用的寄存器組是同一組,否則,就會出現(xiàn)混亂。
void INT0()interrupt 0 using 1
{....
.....
}
interrupt 0 指明是外部中斷0;
interrupt 1 指明是定時器中斷0;
interrupt 2 指明是外部中斷1;
interrupt 3 指明是定時器中斷1;
interrupt 4 指明是串行口中斷;
using 0 是第0組寄存器;
using 1 是第1組寄存器;
using 2 是第2組寄存器;
using 3 是第3組寄存器;
51單片機內(nèi)的寄存器是R0--R7(不是R0-R3)
R0-R7在數(shù)據(jù)存儲器里的實際地址是由特殊功能寄存器PSW里的RS1、RS0位決定的。
using 0時設(shè)置 RS1=0,RS0 =0,用第0組寄存器,R0--R7的在數(shù)據(jù)存儲區(qū)里的實際地址是00H-07H。R0(00H)....R7(07H)
using 1時設(shè)置 RS1=0,RS0 =1,用第1組寄存器,R0--R7的在數(shù)據(jù)存儲區(qū)里的實際地址是08H-0FH。R0(08H)....R7(0FH)
using 2時設(shè)置 RS1=1,RS0 =0,用第2組寄存器,R0--R7的在數(shù)據(jù)存儲區(qū)里的實際地址是10H-17H。R0(10H)....R7(17H)
using 3時設(shè)置 RS1=1,RS0 =1,用第3組寄存器,R0--R7的在數(shù)據(jù)存儲區(qū)里的實際地址是18H-1FH。R0(18H)....R7(1FH) |
|