单片机,c51汇编语言是什么编写程序

注意:如果在程序中使用了,注意在Keil编译器中需要激活Properties中的 2、根据选择的编译模式,把相应的库文件象加"xx.c"一 4、在"xx.c"中加入汇编代码 有时候用到需要精确延时之类的子程序时,用C语言比较难控制,这时候就可以在C中嵌入汇编 比较常用的keil中嵌入汇编的方法如下所示: 如图一,在C文件中要嵌入汇编的地方用#pragma asm和#pragma endasm分隔开来,这样编译时KEIL就知道这中间的一段是汇编了。
 
在有加入汇编的文件中,还要设置编译该文件时的选项
 
 (如图三的状态为选中)
  选上这两项就可以在C中嵌人汇编了,设置后在文件图示中多了三个红色的小方块。
 
为了能对汇编进行封装还要在项目中加入相应的封装库文件, 在笔者的项目中编译模式是小模式所以选用C51S.LIB。这也是最常用的。这些库文件是中KEIL安装目录下的LIB目录中。 加好后就可以顺利编译了。(注:我只在7.0以上版本使用过)
 
  
 
  
 
  
(1)、C51语言中调用汇编语言程序;
C51语言调用汇编语言程序要注意以下几点:
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。
2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51S.LIB)加入工程中。
4:在汇编语言程序中必须声明被调用子程序为公共子程序,在被调用的文件中还需要声明此文件是可从新定位的。
(2)、C51语言中调用外部的C51函数;
C51语言调用外部的C51函数的注意事项如下:
1:在主调函数中必须声明被调用的函数为外部类型的函数,其余都一样。
(3)、C51语言中嵌入汇编程序;
在C51语言中嵌套使用汇编语言编写程序要注意以下的几个问题:
1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。
2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51S.LIB)加入工程中。
编辑:什么鱼 引用地址:
  
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

第3章 89C51单片机汇编语言简介 教学目标 本章主要介绍89C51单片机的寻址方式、指令系统、基本程序结构及汇编语言程序的编写,并给出了两个简单的应用实例。通过本章节的学习,读者应初步掌握89C51单片机汇编语言的基本指令,并能够完成一些简单程序的编写和调试。 任务导入: 基于汇编语言的静态LED显示系统的实现: 利用89C51单片机的I/O端口驱动一个共阳极数码管,在数码管上循环显示0-9数字,时间间隔0.5秒。 任务分析 要实现用一个数码管循环显示数字0~9的功能,我们可把数码管的段选线连接到单片的I/O口上,再通过程序让单片机的I/O口分时输出0~9对应的段码就可以了。单片机的程序又如何编写呢?通过本章的学习,就可以用单片机的汇编语言让数码管按照要求进行显示。 任务必备知识 3.1 89C51单片机指令系统 3.1.1 89C51单片机指令分类 89C51单片机指令系统共有111条指令。这些指令可按不同方法进行分类: 1.按字节数分 单字节指令(49条)、双字节指令(45条)、三字节指令(17条)。 2.按指令的执行时间分 单机器周期指令(64条)、双机器周期指令(45条)、四机器周期指令(2条)。 3.按指令的功能分 数据传送指令(28条)、算术运算指令(24条)、逻辑运算指令(25条)、控制转移指令(17条)、位操作指令(17条)。 指令一般由两部分组成,即操作码和操作数。在介绍指令系统前,我们先了解一些特殊符号的意义,这对今后程序的编写是相当有用的。 Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。 Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1) direct—内部数据存储单元的8位地址。包含0—127(255)内部存储单元地址和特殊功能寄存地址。 #data—指令中的8位常数。 #data16—指令中的16位常数。 addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。 #addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。 rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。 @—间接寄存器寻址或基址寄存器的前缀。 /—为操作的前缀,声明对该位操作数取反。 DPTR—数据指针。 bit—内部RAM和特殊功能寄存器的直接寻址位。 A—累加器。 B—累加器B,用于乘法和除法指令中。 C—进位标志位。 (x)—某地址单元中的内容。 ((x))—由X寻址单元中的内容。 3.1.2 汇编指令格式 各种汇编语言的语句格式是基本相同的,表示如下: [标号:] 操作码助记符 [第一操作数] [,第二操作数] [,第三操作数] [;注释] 即一条汇编语句是由标号、操作码、操作数和注释四个都分所组成。其中方括号括起来的是可选择部分,可有可无,视需要而定。 1.标号 标号是表示指令位置的符号地址,它是以英文字母开始的字母或数字组成的字符串,并以“:”结尾。通常在子程序入口或转移指令的目标地址处才赋予标号。有了标号,程序中的其它语句才能访问该语句。89C51汇编语言有关标号的规定如下: 1)标号是由ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。 2)不能使用本汇编语言已经定义了的符号作为标号,如指令助记符,伪指令助记符以及寄存器的符号名称等。 3)标号后边必须跟以冒号。 4)同一标号在一个程序中只能定义一次,不能重复定义。 5)一条语句可以有标号,也可以没有标号,标号的有无决定着本程序中的其它语句是否需要访问这条语句。 下面例举一些例子,以加深了解。 错误的标号 Q¥: 2.操作码 操作码助记符是表示指令操作功能的英文缩写。每条指令都有操作码,它是指令的核心部分。操作码用于规定本语句执行的操作,操作码可为指令的助记符或伪指令的助记符,操作码是汇编指令中唯一不能空缺的部分。 3.操作数 操作数用于给指令的操作提供数据或地址。在一条指令中,可能没有操作数,也可能只包括一项,也可能包括二项、三项。各操作数之间以逗号分隔,操作码与操作数之间以空格分隔。操作数

51单片机c语言与汇编语言混合编程浅析.doc

简介:本文档为《51单片机c语言与汇编语言混合编程浅析doc》,可适用于高等教育领域,主题内容包含单片机c语言与汇编语言混合编程浅析单片机C语言与汇编语言混合编程浅析单片机C语言与汇编语言混合编程浅析摘要:摘要:语言克服了汇编语言可读性、可移植性符等。

单片机c语言与汇编语言混合编程浅析单片机C语言与汇编语言混合编程浅析单片机C语言与汇编语言混合编程浅析摘要:摘要:语言克服了汇编语言可读性、可移植性差的缺点现已成为开发单片机应用程序的主要手段。但一些特殊的应用场合仍然需要用汇编语言编写程序这就必然涉及到语言与汇编的相互调用即混合编程的问题。本文介绍了语言与汇编语言混合编程的两种基本方式以及在keil编译器中的具体处理方法。关键词:关键词:混合编程嵌入汇编参数传递是广泛应用于系列单片机编程的高级语言具有语言的开发效率高、可读性强、可移植好等诸多优点。keil编译器提供了大量功能丰富的库函数能够对源程序编译生成高效的目标代码从而提高了程序的开发与维护效率因此采用语言开发系列单片机应用程序是开发人员的首选。大多数情况下采用语言即可完成预期的任务但是采用语言编程还是存在着效率不如汇编高、对底层硬件控制不如汇编方便、对代码执行速度有特殊要求(如精确延时)情况时无法实现等缺点。因而编写高速、高效率、可移植性好的单片机应用程序必须结合语言与汇编语言各自的优点即语言与汇编语言混合编程。混合编程通常的做法是程序的框架、复杂的数学运算、多任务管理等用语言编写对于那些要求执行效率高、精确延时、直接控制底层硬件等部分则由汇编语言来完成。编程实践证明混合编程有机结合了的强可读性与汇编的高实时性比单独使用语言编程效率要高。但在实际开发中不少初学者对混合编程无法下手下面就作者本人的经验探讨混合编程的一些基本方法。一、中嵌入汇编程序在中嵌入汇编程序通常用在汇编代码量少、内部无复杂的跳转的情况下可生成精简的代码、减少运行时间。在keil编译器中中嵌入汇编程序是通过#pragaasendas预处理语句来实现其格式如下:#pragaas汇编程序#pragaendas通过#pragaasendas语句告知编译器中间的语句行不用编译为汇编程序代码。在keil编译器中需设置嵌入汇编代码的源文件中的“ptinsfr”选项激活其中“GenerateAsseblerSRFile”和“AssebleSRFile”两个选项然后根据选择的编译模式把相应的库文件添加到工程中编译即可生成目标代码。使用该方法可以在源代码的任何位置嵌入汇编代码主要用于延时和中断处理。下例即是一个在程序中嵌入汇编代码的实例。二、的参数传递规则与命名规则程序中调用汇编程序是通过函数调用形式来实现的汇编程序中各种段的命名、安排、参数传递和返回必须严格遵守keil编译器的参数传递规则和命名规则才能保证正确的调用。()参数传递规则参数传递的简单办法是使用寄存器这样做能够产生高效的代码其传递规则如表所示。表参数传递规则参数类型har一字节指针int二字节指针lngflat一般指针第个参数RRRR,RRRR第个参数RRRR,RRRR第个参数RRR无RRR如果传递的参数较多部分参数可在固定的存储区域内传送。传递参数所使用的存储器空间取决于选择的存储模式这种参数传递方式代码效率不高、速度较慢一般尽量不要使用。程序调用汇编程序过程中若存在返回值汇编语言通过寄存器传递参数给程序其传递规则如表所示。表返回值传递规则返回值类型使用寄存器说明bit进位标志(unsigned)harR(unsigned)intRR高位在R低位在R(unsigned)lngR,R高位在R低位在RflatR,R高位在R低位在R指针RRR存储类型在R高位在R低位在R()命名规则为了使程序能够正确调用汇编程序汇编程序必须遵循中函数名的转换规则否则无法实现程序的调用其规则如表所示。表函数名的转换规则函数声明转换函数名说明vidfun(vid)FUN无参数传递或不含寄存器参数的函数名不做改变地传入目标文件中名字只是简单地转换为大写形式vidfun(har)FUN带寄存器参数的函数在其名字前加上前缀“”以示区别表明这类函数包含寄存器内的参数传递vidfun(vid)reentrantFUN对于再入函数在其名字前加上前缀“”以示区别表明这类函数包含堆栈内的参数传递三、中调用汇编程序编写被调用的汇编程序除了参数必须按照相应的规则外程序的格式也有相应的规则这些规则比较繁琐实际处理中可查阅有关资料。以下给出一个简单的示例。代码中的viddelay(har)函数是在另一汇编文件中实现的。将源文件与汇编源文件一同添加到keil编译器的工程文件中编译即可生成目标代码。四、总结语言与汇编语言混合编程可以实现两种语言的优势互补即可提高程序的开发效率、增强程序的可读性又能够方便、精确地控制硬件具体应用中主要

我要回帖

更多关于 汇编语言是什么 的文章

 

随机推荐