<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          單片機(jī)程序C語(yǔ)言與匯編語(yǔ)言混合編程

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

          430單片機(jī)C語(yǔ)言匯編語(yǔ)言混合編程

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

          1.C語(yǔ)言函數(shù)和匯編語(yǔ)言函數(shù)相互調(diào)用
          在這個(gè)示例中C語(yǔ)言函數(shù)main()調(diào)用匯編語(yǔ)言函數(shù)get_rand()以得到一個(gè)隨機(jī)數(shù);匯編語(yǔ)言函數(shù)get_rand()首先調(diào)用C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù)rand()得到一個(gè)整型隨機(jī)值,然后用調(diào)用C語(yǔ)言函數(shù)mult()的方法把這個(gè)隨機(jī)值乘以main()函數(shù)傳遞給自己的實(shí)參,并把乘積值返回給main()函數(shù)。
          1.1C語(yǔ)言源文件
          #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匯編語(yǔ)言源程序
          ; ******************************************************************
          ;文件名: asm_source.s43
          ; C語(yǔ)言和匯編語(yǔ)言混合編程,匯編語(yǔ)言源程序
          ;這段源程序調(diào)用兩個(gè)C語(yǔ)言函數(shù),標(biāo)準(zhǔn)庫(kù)函數(shù)rand()和用戶自定義函數(shù)mult()
          ; *******************************************************************
          #include "msp430x14x.h";頭文件
          NAME asmfile
          EXTERN rand; C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)rand()
          EXTERN mult; c_source.c中用戶自定義函數(shù)
          ;====================================================================
          ; get_rand
          ;====================================================================
          PUBLIC get_rand;導(dǎo)出函數(shù)名給C語(yǔ)言函數(shù)
          RSEG CODE
          get_rand;
          push R11;普通寄存器入棧保護(hù)
          mov.b R12,R11; C函數(shù)傳遞的實(shí)參在R12中,送入R16暫存

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

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

          2.匯編語(yǔ)言編寫中斷服務(wù)程序
          為了提高整個(gè)系統(tǒng)響應(yīng)速度,要求中斷服務(wù)程序的執(zhí)行時(shí)間較短,執(zhí)行速度較快,因此最好的方法就是用匯編語(yǔ)言編寫中斷服務(wù)程序。但要注意:1、中斷服務(wù)程序不能有參數(shù)傳遞和返回值。2、中斷服務(wù)程序中所有被用到的寄存器都需要保護(hù)。本示例用匯編語(yǔ)言編寫了看門狗定時(shí)器的中斷服務(wù)程序,用C語(yǔ)言編寫了主程序。
          2.1C語(yǔ)言主程序
          #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匯編語(yǔ)言中斷服務(wù)程序
          ;**********************************************************************
          ;文件名: wdt_int.s43
          ; C語(yǔ)言和匯編語(yǔ)言混合編程,匯編語(yǔ)言源程序
          ;看門狗定時(shí)器中斷服務(wù)程序
          ;***********************************************************************
          NAME WDT_ISR
          #include "msp430x14x.h";頭文件
          ;==============================================================
          ;看門狗定時(shí)器中斷服務(wù)程序
          ;================================================================
          PUBLIC wdt_isr;導(dǎo)出函數(shù)名給C語(yǔ)言函數(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



          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();