新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 幾種單片機的中斷函數寫法

        幾種單片機的中斷函數寫法

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


        關鍵詞: 單片機中斷函

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 米脂县| 诸城市| 万载县| 河间市| 尼玛县| 汤原县| 桃源县| 若尔盖县| 滨州市| 洪雅县| 荔波县| 喀什市| 玛纳斯县| 昌平区| 酒泉市| 富宁县| 织金县| 莆田市| 清河县| 乌鲁木齐市| 大同县| 曲麻莱县| 临武县| 龙井市| 庆阳市| 溆浦县| 读书| 庄浪县| 抚顺县| 四会市| 宁陕县| 景德镇市| 青海省| 文水县| 枣庄市| 赤壁市| 文昌市| 娄底市| 象州县| 宣恩县| 罗山县|