原创 51混合编程的一些注意

2009-4-13 09:09 3003 10 10 分类: MCU/ 嵌入式

一般利用寄存器传递参数,但是如果参数不够用时候,部分参数在固定存储器传递,此时还依赖寄存器,必定存在传递方式详情的困难获知。有时候干脆用“pragrama noregparms"置顶存储器传递,代码效率低点,但是结构位置清晰。


     在主程序中一定要对外部汇编函数进行声明,不要混淆调用声明和函数定义。extern是不可省略的。


    在汇编子程序部分分以下3部分:


   1、定义模块名。模块名  ?PR?函数名?模块名 。函数名如果在有参传递时候,要前加_号。


     模块中:?PR?_函数名?模块名   segment code    一定别忘记声明程序代码


                   ?DT?_函数名 ?模块名  segment overlayable   这边我定义的是局部变量,所以必须加overlayable,反之如果你定义全局变量加overlayable链接定位符号的话,全局变量将发生不可预见的错误数据,正如并非你所想的数据。


2、要定义公共符号


     在BASIC语言中,要先声明是公共符号,这边跟BASIC类似,加个PUBLIC公共符号。这样主程序和汇编子程序变量将寻求一致。定义传递的起始位置。


   PUBLIC ?函数名?BYTE (一般用字节传递)


  RESG  ?DT?_函数名?模块名(RESG大家都很清楚,如果用过合泰单片机汇编编程得人明白,在程序段和数据段前都有这个符号进行定位连接)


?_函数名?BYTE


 传递先满足参数传递,参数传递不足使用内部数据段传递


为了不长期占用寄存器,在汇编入口处,必须及时转存寄存器参数 


   TLC549 AD转换器程序


 



#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay1(uint x);


extern uchar chai;       
extern uchar a_func(uchar);


void delay1(uint x)         //延时程序
{
 uchar tw;
 while (x-->0){
 for (tw=0;tw<125;tw++){;}
 }
}


void main()
{
  delay1(10);
  EA="0";
  chai="a"_func(0);         //带参数调用
  while(1);
}


 


汇编程序段


 NAME TLC549                           


   ?PR?_a_func?TLC549     SEGMENT CODE       
   ?DT?_a_func?TLC549     SEGMENT DATA OVERLAYABLE


   ?DT?TLC549             SEGMENT DATA            


  PUBLIC   chai                                  


PUBLIC   ?_a_func?BYTE                       


   PUBLIC    _a_func                               


   RSEG  ?DT?_a_func?TLC549 
   ?_a_func?BYTE:       


  aa:DS 1    
   RSEG  ?DT?TLC549
  chai:DS 1
   RSEG  ?PR?_a_func?TLC549  
  _a_func:          


CLK      EQU P1.0
DOUT     EQU P1.1
CS       EQU P1.2


         MOV aa,R7      
         MOV A ,#aa
         CLR CLK
         SETB CS
         MOV R0,#10H    ;延时程序
WAIT:    NOP
         DJNZ R0,WAIT
         CLR CS
         NOP
         NOP
         MOV R1,#08H    ;串行转换部分
LOOP:    SETB CLK
         SETB DOUT
         MOV C,DOUT
         RLC A
         CLR CLK
         NOP
         NOP
         DJNZ R1,LOOP
         MOV R7,A       ;将结果放入R7中,为返回值
  RET


end

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-4-13 09:14

相关推荐阅读
用户184981 2011-03-18 13:35
平板5剑客--英雄续战
板电脑的5剑客:摩托、thinkpad、联想、黑莓、三星。在2011年开始,大放光彩。。。安卓系统3.0全面超越了苹果的系统,苹果的平板无论硬件还是软件、做工,价格将毫无优势。。     当然平板5...
用户184981 2011-01-22 16:09
笔记本外壳材料只有3种
对于外观酷似塑料的碳纤维材质,很多同朋友总是分不清楚它和普通塑料的区别,下面我们就来简单介绍一下碳纤维与其它笔记本外壳材质的优劣对比。 碳纤维的强韧性是铝镁合金的两倍,又有ABS工程塑料的高可塑性。外...
用户184981 2010-11-28 15:06
别相信鲁大师等电脑测温软件
别被鲁大师或者QQ管家等提供的温度软件工具忽悠了: 他们显示的电脑温度来自于电脑的BIOS信息,电脑的BIOS信息是厂家在bootloader时候的一段固件代码,里面有测温程序,而程序是可以人为编写的...
用户184981 2010-10-03 10:30
2010笔记本质量最不可靠度排行
北京时间8月10日下午消息,据国外媒体报道,美国科技博客TechRepublic最近对IT专业人士的调查显示,在对笔记本的好坏进行评价时,宏碁笔记本电脑几乎被一致认为是最差的产品。 过去几年间,随着笔...
用户184981 2010-09-11 15:02
最新笔记本品牌质量排行
最新笔记本品牌质量排行榜) 根据美国美国质量学会(ASQ )报告,Underwriters Laboratories Inc组长,在2008年对所有IT品牌做了详细质量分析报告,同期,《21世纪》,针...
用户184981 2010-05-27 23:52
突然想起了她
 时光飞逝,又将过掉半年了,工作待遇提高了,最近好忙好忙,真担心自己身体会跨了。城市的生活节奏快的让人窒息。      雨下的很多,雨带来了静思。今天想起了那个女孩,拨打了她手机,提示你拨打的号码是空...
EE直播间
更多
我要评论
1
10
关闭 站长推荐上一条 /3 下一条