欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

A51與C語言的混合編程

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年01月02日   【字體:

我研究一上午,寫了個程序,可謂麻雀雖小可五臟俱全,希望正在學習這塊的人能少找點資料,少花點時間更快的掌握。

#include <reg52.h>
/****在匯編中定義*****/
extern void delay(void) ;
extern add(int a,int b);
//測試匯編調用的代碼(不想直接用匯編來走主程序)
extern void test();
/***在匯編中定義的代碼段****/
extern  unsigned char cc;

//  C語言中定義的函數
void delay_c();
unsigned int addcc(unsigned int wd1,unsigned int wd2);
//C語言中定義的數據段
unsigned int aa;
unsigned int bb;

void main()
{
  
   delay();
   cc=add(10,15);
   test();
   while(1);
}
void delay_c()
{
  unsigned char cc;
  cc=0xff;
  while(cc--);
}
unsigned int addcc(unsigned int wd1,unsigned int wd2)
{
unsigned int cl;
cl=wd1+wd2;
return cl;
}


delay.asm


NAME  ONE        ;模塊的名稱
;ORG  1000H       ;函數存放的起始單元
?PR?delay?ONE      SEGMENT CODE   ;標注函數的定義位置
?PR?_add?ONE       SEGMENT CODE
?PR?test?ONE    SEGMENT CODE
cc       DATA   33H     ;直接 定義數據的地址
PUBLIC delay     ;聲明為全局
PUBLIC _add
PUBLIC test
PUBLIC cc     ;聲明全局
EXTRN DATA(aa)  ;注意這里是extrn 而不是C中extern  在 c中定義
EXTRN DATA(bb)
EXTRN CODE(delay_c)
EXTRN CODE(_addcc)        ;帶參數的網上的資料EXTRN CODE(addcc) 我沒測試成功。按理名字應該加_fun 這個是帶參的定義方式
;EXTRN DATA(?_addcc?BYTE) ;網上傳參通過這個我也沒試成功,直接對寄存器做數據的處理了。

   RSEG  ?PR?delay?ONE   ;(不帶參函數)重新定位函數的代碼位置
delay:
   MOV R0 , #44H
   DJNZ R0,$
   RET
  RSEG ?PR?_add?ONE      ;(帶參函數)參數自動防止到寄存器中可以網上查下,這里 15分別存放到R7,R6  10存入R5,R4
_add:
   MOV A,R5
   ADD A,R7
   MOV R7,A
   MOV A,R4
   ADDC A,R6
   MOV aa,R7
   RET

RSEG ?PR?test?ONE
test:
  ;掉用不帶參數的C函數
  CALL delay_c
  ;調用帶參數的C函數
  MOV R5,#15
  MOV R7,#11
  LCALL _addcc
  MOV cc,R7
  RET
END  ;程序結束
關閉窗口

相關文章