新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 幾種單片機(jī)的中斷函數(shù)寫(xiě)法

幾種單片機(jī)的中斷函數(shù)寫(xiě)法

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
寫(xiě)單片機(jī)程 序,中斷是免不了的。我比較喜歡用C寫(xiě)單片機(jī)程序,簡(jiǎn)單而且可讀性高,當(dāng)然程序效率沒(méi)有匯編的高。目前寫(xiě)過(guò)51單片機(jī)跟AVR單片機(jī)的C程序,最近在看 MSP430的書(shū)。用C寫(xiě)不同的單片機(jī)程序其實(shí)都是大同小異,因此能對(duì)不熟悉的單片機(jī)也能很快上手寫(xiě)程序。不過(guò)中斷函數(shù)的寫(xiě)法,各個(gè)編譯器往往都會(huì)有些差 別。
最早寫(xiě)的C程序是51單片機(jī)的,用的編譯器自然是大名鼎鼎的keil c了。Keil的功能還是非常強(qiáng)勁的,不僅能編譯,還有軟件仿真調(diào)試與硬件調(diào)試的功能。由于條件簡(jiǎn)陋,沒(méi)用過(guò)什么仿真器,一直都是靠軟件仿真調(diào)試程序的。 Keil 中的中斷函數(shù)一般格式如下:
void 函數(shù)名() interrupt n using n
{
…….
}
其中函數(shù)名可以任意取,關(guān)鍵字interrupt用來(lái)指明這是一個(gè)中斷服務(wù)函數(shù),后面的n表示中斷號(hào),關(guān)鍵字using加后面的n表示使用哪一組寄存器。
后然接觸到AVR的單片機(jī),該單片機(jī)開(kāi)發(fā)環(huán)境一般用ICC或者是GCC。由于ICC是商用軟件,而GCC是免費(fèi)的,因此我一般用GCC來(lái)寫(xiě)AVR的C程 序?,F(xiàn)在版本的GCC for AVR有了一些改進(jìn),對(duì)于中斷函數(shù)支持兩種關(guān)鍵字ISR與SIGNAL,其格式如下:
ISR(vect)
{
………
}
SIGNAL(vect)
{
……..
}
其中的vect就是中斷向量名,根據(jù)不同的型號(hào)的AVR單片機(jī)的不同的中斷源都會(huì)有相對(duì)應(yīng)的中斷向量名,比如外部中斷0對(duì)于ISR格式的中斷向量名為INT0_vect,對(duì)SIGNAL則為SIG_INTERRUPT0。
最近在看TI的MSP430系列單片機(jī)的資料,看到該單片機(jī)采用C430寫(xiě)的中斷服務(wù)函數(shù)有點(diǎn)像前兩種的綜合,其格式如下:
interrupt [vect] void 函數(shù)名(void)
{
…….
}
其中vect也是中斷向量名,函數(shù)名可以任取。
比較這幾種中斷函數(shù)寫(xiě)法,本人更傾向于AVR的GCC的寫(xiě)法。首先對(duì)于中斷函數(shù)來(lái)說(shuō)即不能有輸入?yún)?shù)又沒(méi)有返回值,沒(méi)必要再給它加個(gè)“void 函數(shù)名(void)”的形式的函數(shù)。而且光看中斷向量名一般都能知道是哪個(gè)中斷源產(chǎn)生,再寫(xiě)個(gè)中斷函數(shù)名作解釋似乎有點(diǎn)重復(fù)。對(duì)于keil c用中斷向量號(hào)的形式來(lái)表示中斷源,感覺(jué)有點(diǎn)麻煩,記住中斷源的中斷號(hào)比記中斷向量要難多了。不過(guò)可能標(biāo)準(zhǔn)51的中斷緣比較少,而且keil應(yīng)該出來(lái)的比 較早,所以才會(huì)采用這種方式。


關(guān)鍵詞: 單片機(jī)中斷函

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉