新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430 單片機C語言和匯編語言混合編程

        MSP430 單片機C語言和匯編語言混合編程

        作者: 時間:2012-03-19 來源:網絡 收藏

        4.1.2 源程序
        ; ******************************************************************
        ; 文件名: asm_source.s43
        ; C源程序
        ; 這段源程序調用兩個C語言函數,標準庫函數rand()和用戶自定義函數mult()
        ; *******************************************************************
        #include msp430x14x.h ; 頭文件
        NAME asmfile

        EXTERN rand ; C語言標準庫函數rand()
        EXTERN mult ; c_source.c中用戶自定義函數

        ;====================================================================
        ; get_rand
        ;====================================================================
        PUBLIC get_rand ; 導出函數名給C語言函數
        RSEG CODE
        get_rand;
        push R11 ; 普通寄存器入棧保護
        mov.b R12,R11 ; C 函數傳遞的實參在R12中,送入R16暫存

        Call #rand ; 調用 C 函數 rand()
        ; 函數值為整型返回在R12中

        ; rand()函數值作為mult()函數的第一實參
        ; 送入R12進行參數傳遞
        mov R11,R14 ; C 函數傳遞的實參作為mult()函數的第二實參
        ; 送入R14進行參數傳遞
        Call #mult ; mult()值返回在 R12 / R13寄存器對
        pop R11 ; 出棧恢復寄存器內容
        ret
        END

        4.2 匯編語言編寫中斷服務程序

        為了提高整個系統響應速度,要求中斷服務程序的執行時間較短,執行速度較快,因此最好的方法就是用匯編語言編寫中斷服務程序。但要注意:1、中斷服務程序不能有參數傳遞和返回值。2、中斷服務程序中所有被用到的寄存器都需要保護。本示例用匯編語言編寫了看門狗定時器的中斷服務程序,用C語言編寫了主程序。

        4.2.1 C語言主程序
        /********************************************************************/
        /* 文件名:c_main.c 2003-01-08 */
        /* C語言和匯編語言,C源程序 */
        /* 這段源程序被看門狗定時器中斷后執行匯編語言函數編寫的中斷服務程序 */
        /* 注意工程必需包含匯編語言源文件 wdt_int.s43 */
        /********************************************************************/
        #include x14x.h> /* 頭文件 */
        /********************************************************************/
        /*主函數 */
        /********************************************************************/
        void main( void )
        {
        // === 系統初始化 =============================================
        IFG1=0; /* 清除中斷標志1 */
        WDTCTL=WDT_MDLY_32; /* 看門狗的定時間隔為 32ms */
        P1DIR = 0x01; /* P1.0 設置為輸出 */
        IFG1 = ~WDTIFG; /* 清除已掛起的看門狗定時器中斷 */
        IE1 |= WDTIE; /* 允許看門狗定時器中斷 */
        _EINT();
        // === 系統初始化結束===========================================
        while(1); /*主程序是一段死循環
        }
        // === 主函數結束 ==============================================

        c語言相關文章:c語言教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定日县| 通山县| 古交市| 南江县| 湖口县| 柘荣县| 旅游| 尚义县| 平安县| 龙海市| 那坡县| 甘孜| 汾阳市| 上犹县| 昂仁县| 海伦市| 七台河市| 嵊泗县| 青田县| 澜沧| 图木舒克市| 寻甸| 镇平县| 南康市| 霍邱县| 关岭| 石门县| 红桥区| 南华县| 霍林郭勒市| 平陆县| 宽甸| 清新县| 东乌珠穆沁旗| 财经| 霍林郭勒市| 确山县| 黎平县| 建水县| 特克斯县| 通辽市|