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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 關于在 KEIL C51 中嵌入?yún)R編以及C51與A51間的相互調(diào)用

          關于在 KEIL C51 中嵌入?yún)R編以及C51與A51間的相互調(diào)用

          作者: 時間:2012-06-29 來源:網(wǎng)絡 收藏

          如何在 (v6.21) 中調(diào)用函數(shù)的一個示例 [ycong_kuang]

          有關c51調(diào)用的方法已經(jīng)有很多帖子講到,但是一般只講要點,很少有對整個過程作詳細描述,對于初學者是不夠的,這里筆者
          通過一個簡單例子對這個過程進行描述,希望能對初學者有所幫助。幾年來,在這個論壇里筆者得到很多熱心人指導,因此也希望
          藉此盡一點綿薄之力。

          在這個例子里,闡述了編寫c51程序調(diào)用函數(shù)的一種方法,這個外部函數(shù)的入口參數(shù)是一個字符型變量和一個位變量,返回值是
          一個整型變量。例中,先用c51寫出這個函數(shù)的主體,然后用SRC控制指令編譯產(chǎn)生asm文件,進一步修改這個asm文件就得到我們所
          要的匯編函數(shù)。該方法讓編譯器自動完成各種段的安排,提高了匯編程序的編寫效率。

          step1. 按寫普通c51程序方法,建立工程,在里面導入main.c文件和CFUNC.c文件。

          相關文件如下:
          //main.c文件
          #include reg51.h >

          #define uchar unsigned char
          #define uint unsigned int

          extern uint AFUNC(uchar v_achr,bit v_bflag);

          void main()
          {
          bit BFLAG;
          uchar mav_chr;
          uint mvintrslt;

          mav_chr=0xd4; BFLAG=1;
          mvintrslt=AFUNC(mav_chr,BFLAG);
          }

          //CFUNC.c文件

          #define uchar unsigned char
          #define uint unsigned int

          uint AFUNC(uchar v_achr,bit v_bflag)
          {
          uchar tmp_vchr;
          uint tp_vint;

          tmp_vchr=v_achr;
          tp_vint=(uint)v_bflag;
          return tmp_vchr+(tp_vint8);
          }

          step2. 在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Options for ...”,點擊右邊的“Generate Assembler SRC
          File”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態(tài);

          step3. 根據(jù)選擇的編譯模式,把相應的庫文件(如 Small 模式時,是 KeilLibS.Lib)加入工程中,該文件必須作為工
          程的最后文件;

          step4. build這個工程后將會產(chǎn)生一個CFUNC.SRC的文件,將這個文件改名為CFUNC.A51(也可以通過編譯選項直接產(chǎn)生CFUNC.A51文
          件),然后在工程里去掉庫文件(如C51S.Lib)和CFUNC.c,而將CFUNC.A51添加到工程里。

          //CFUNC.SRC文件如下
          .CFUNC.SRC generated from: CFUNC.c
          NAME CFUNC

          ?PR?_AFUNC?CFUNC SEGMENT CODE
          ?BI?_AFUNC?CFUNC SEGMENT BIT OVERLAYABLE
          PUBLIC ?_AFUNC?BIT
          PUBLIC _AFUNC

          RSEG ?BI?_AFUNC?CFUNC
          ?_AFUNC?BIT:
          v_bflag?041: DBIT 1
          ; #define uchar unsigned char
          ; #define uint unsigned int
          ;
          ; uint AFUNC(uchar v_achr,bit v_bflag)

          RSEG ?PR?_AFUNC?CFUNC
          _AFUNC:
          USING 0
          ; SOURCE LINE # 5
          ;---- Variable 'v_achr?040' assigned to Register 'R7' ----
          ; {
          ; SOURCE LINE # 6
          ; uchar tmp_vchr;
          ; uint tp_vint;
          ;
          ; tmp_vchr=v_achr;
          ; SOURCE LINE # 10
          ;---- Variable 'tmp_vchr?042' assigned to Register 'R5' ----
          MOV R5,AR7
          ; tp_vint=(uint)v_bflag;
          ; SOURCE LINE # 11
          MOV C,v_bflag?041
          CLR A
          RLC A
          ;---- Variable 'tp_vint?043' assigned to Register 'R6/R7' ----
          ; return tmp_vchr+(tp_vint8);
          ; SOURCE LINE # 12
          MOV R6,A
          MOV R4,#00H
          CLR A
          ADD A,R5
          MOV R7,A
          MOV A,R4
          ADDC A,R6
          MOV R6,A
          ; }
          ; SOURCE LINE # 13
          ?C0001:
          RET
          ; END OF _AFUNC

          END

          step5. 檢查main.c的“Generate Assembler SRC File”和“Assemble SRC File”是否有效,若是有效則點擊使檢查框變成無效狀
          態(tài);再次build這個工程,到此你已經(jīng)得到匯編函數(shù)的主體,修改函數(shù)里面的匯編代碼就得到你所需的匯編函數(shù)了。

          上拉電阻相關文章:上拉電阻原理

          上一頁 1 2 下一頁

          關鍵詞: KEIL C51 匯編

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();