在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機程序C語言與匯編語言混合編程

            單片機程序C語言與匯編語言混合編程

            作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏

            430單片機C語言匯編語言混合編程

            本文引用地址:http://www.biyoush.com/article/201611/322505.htm

            1.C語言函數(shù)和匯編語言函數(shù)相互調(diào)用
            在這個示例中C語言函數(shù)main()調(diào)用匯編語言函數(shù)get_rand()以得到一個隨機數(shù);匯編語言函數(shù)get_rand()首先調(diào)用C語言的標準庫函數(shù)rand()得到一個整型隨機值,然后用調(diào)用C語言函數(shù)mult()的方法把這個隨機值乘以main()函數(shù)傳遞給自己的實參,并把乘積值返回給main()函數(shù)。
            1.1C語言源文件
            #include

            extern unsigned long get_rand(unsigned char seed);

            void main( void )
            {
            unsigned char seed;
            unsigned long value;

            // ===系統(tǒng)初始化==========================================
            IFG1 = 0;
            WDTCTL = WDTPW+WDTHOLD;
            P1DIR = 0xff;
            // ===系統(tǒng)初始化結(jié)束========================================

            seed = 0x55;
            value = get_rand(seed);
            while(1);
            }
            // ===主程序結(jié)束==================================================

            unsigned long mult(int x , int y)
            {
            return (x *y);
            }
            // ===乘法子程序結(jié)束================================================

            1.2匯編語言源程序
            ; ******************************************************************
            ;文件名: asm_source.s43
            ; C語言和匯編語言混合編程,匯編語言源程序
            ;這段源程序調(diào)用兩個C語言函數(shù),標準庫函數(shù)rand()和用戶自定義函數(shù)mult()
            ; *******************************************************************
            #include "msp430x14x.h";頭文件
            NAME asmfile
            EXTERN rand; C語言標準庫函數(shù)rand()
            EXTERN mult; c_source.c中用戶自定義函數(shù)
            ;====================================================================
            ; get_rand
            ;====================================================================
            PUBLIC get_rand;導出函數(shù)名給C語言函數(shù)
            RSEG CODE
            get_rand;
            push R11;普通寄存器入棧保護
            mov.b R12,R11; C函數(shù)傳遞的實參在R12中,送入R16暫存

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

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

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

            void main( void )
            {
            // ===系統(tǒng)初始化=============================================
            IFG1=0;
            WDTCTL=WDT_MDLY_32;
            P1DIR = 0x01;
            IFG1 &= ~WDTIFG;
            IE1 |= WDTIE;
            _EINT();
            // ===系統(tǒng)初始化結(jié)束===========================================
            while(1);/*主程序是一段死循環(huán)
            }
            // ===主函數(shù)結(jié)束==============================================

            2.2匯編語言中斷服務程序
            ;**********************************************************************
            ;文件名: wdt_int.s43
            ; C語言和匯編語言混合編程,匯編語言源程序
            ;看門狗定時器中斷服務程序
            ;***********************************************************************
            NAME WDT_ISR
            #include "msp430x14x.h";頭文件
            ;==============================================================
            ;看門狗定時器中斷服務程序
            ;================================================================
            PUBLIC wdt_isr;導出函數(shù)名給C語言函數(shù)
            RSEG CODE
            wdt_isr
            xor.b #001h,&P1OUT;觸發(fā)P1.0,led亮滅轉(zhuǎn)換
            reti;中斷返回
            ;================================================================
            COMMON INTVEC(1);中斷向量段
            ;================================================================
            ORG WDT_VECTOR
            DW wdt_isr
            END



            評論


            技術(shù)專區(qū)

            關(guān)閉