




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C51编程说明 一、单片机C语言与汇编语言在单片机的开发应用中,逐渐引入了高级语言,C语言就是其中的一种。在单片机开发中另一种常见的语言就是汇编语言。与C语言相比汇编语言的可读性与可维护性不强,特别是当程序没有很好的标注的时候;其次就是代码的可重用性也比较低。使用C语言可以很好的解决这一问题。C语言具有良好的模块化,容易阅读和维护等优点。由于模块化,C语言编写的程序有很好的可移植性从而减少了程序开发时间。对于大多数51系列的单片机,使用C语言这样的高级语言与使用汇编语言相比具有如下优点:(1) 不需要了解处理器的指令集,也不必了解存储器结构。(2) 寄存器分配和寻址方式由编译器进行管理,编程时不需考虑存储器的寻址和数据类型等细节。(3) 指定操作的变量选择组合提高了程序的可读性。(4) C语言中的库文件提供许多标准的例程,例如格式化输出、数据转换和浮点运算等。(5) 通过C语言可以实现模块化编程技术,从而可以将编好的程序加入到新的程序中。二、C51对标准C语言的扩展C51的特色主要体现在以下几个方面:(1) C51虽然继承了标准C语言的绝大部分的特性,而且基本语法相同,但是本身又在特定的硬件结构上有所扩展,如关键字sbit、data、idata、pdata、xdata、code等。(2) 应用C51更注重对系统资源的理解,因为单片机的系统资源相对PC机来说很贫乏,对于RAM、ROM中的每一字节都要充分的利用。可以通过编译生成的.m51文件来了解自己程序中资源的利用情况。(3) 程序中的各种算法要精简,不要对系统构成过重的负担。尽量减少浮点运算,可以用unsigned无符号型数据的就不要用有符号型数据,尽量避免多字节的乘除运算,多使用移位运算等。C51相对于标准C语言的扩展直接针对51系列CPU硬件,大致有以下几个方面。数据类型C51具有标准C语言的所有标准数据类型,除此之外,为了更加有效的利用51单片机的结构,还加入了以下特殊的数据类型。bit位变量值为0或1sbit从字节中声明的位变量为0或1sfr特殊功能寄存器,sfr的字节地址为0255sfr16特殊功能寄存器,sfr的字节地址为065535其余的数据类型如char、short、int、long、float等与标准C语言完全相同。bit、sbit、sfr、和sfr16数据类型专门用于51单片机硬件和C51编译器,并不是标准C语言的一部分,不能通过指针进行访问。bit、sbit、sfr、和sfr16数据类型专门用于访问51单片机的特殊功能寄存器,例如sfr P00x80,表示声明P0,并为其分配特殊功能寄存器地址0x80。当结果为不同的数据类型时,C51编译器自动转换数据类型。例如位变量在整数分配中就被转换成一个整数。除了数据类型的转换之外,带变量的符号扩展也是自动完成的。存储类型及存储区C51编译器支持51单片机及其扩展系列,并提供对51所有存储区的访问。存储区可分为内部数据存储区、外部数据存储区以及程序存储区。51单片机内部的数据存储区是可读写的,51派生系列最多可有256字节的内部数据存储区,其中低128字节可直接寻址,高128字节(从0x80到0xFF)只能间接寻址。从20H开始的16字节可位寻址。内部数据区又可分为3个不同的存储类型:data、idata和bdata。外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。 C51编译器提供两种不同的存储类型xdata和pdata访问外部数据。程序CODE存储区是只读的,不能写。程序存储区可能在51单片机CPU内或者在外部或者内外都有,这由51单片机派生的硬件决定。每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比外部数据存储器的访问快许多,因此应当将频繁使用的变量放在内部数据存储器中,而把用的较少的变量放在外部数据存储器中。各存储区的简单描述如表1所示。变量声明中还包括了对存储器类型的指定,即指定变量存放的位置。表1 存储区描述存储区描述DATARAM的低128字节,可在一个周期内直接寻址BDATADATA区可字节、位混合寻址的16字节区IDATARAM区的高128字节,必须采用间接寻址XDATA外部存储区,使用DPTR间接寻址PDATA外部存储区的低256字节,采用间接寻址CODE程序存储区使用DPTR寻址下面分别详细介绍各存储区并给出应用实例。DATA区 DATA区的寻址是最快的,所以用该把经常使用的变量放在DATA区;但是DATA区的空间是有限的,DATA区除了包含程序变量外,还包含了堆栈和寄存器组。DATA区声明中的存储类型标识符为data,通常指低128字节的内部数据区存储的变量,可直接寻址。声明举例如下:unsigned char data sustem_status=0;unsigned int data unit_id2;char data inp_string16;float data outp_value;mymtype data new_val;标准变量和用户自声明变量都可以存储在DATA区中,只要不超过DATA区的范围即可。因为C51使用默认的寄存器组来传递参数,这样DATA区至少失去了8字节的空间。另外,当内部堆栈溢出的时候,程序会复位。这是因为51单片机没有硬件报错机制,堆栈的溢出只能以这样的方式表示出来,因此要声明足够大的堆栈空间来防止堆栈溢出。BDATA区 BDATA区实际就是DATA区中的位寻址区,在这个区声明变量就可进行位寻址。位变量的声明对状态寄存器来说是十分有用的,因为它可能仅仅需要使用某一位,而不是整字节。BDATA区声明中的存储类型标识符为bdata,指内部可位寻址的16字节存储区(20H到2FH)可位寻址变量的数据类型。以下是在BDATA区中声明的位变量的例子:unsigned char bdata status_byte;unsigned int bdata status_word;unsigned long bdata status_dword;对变量位进行寻址产生的汇编代码比声明DATA区的字节位所产生的汇编代码要好,如果对声明在BDATA区中的字节位采用偏移量进行寻址而不是用先前声明的位变量名时,编译后的代码是错误的。IDATA区 IDATA区也可存放使用比较频繁的变量,使用寄存器作为指针进行寻址,即在寄存器中设置8位地址进行间接寻址。与外部存储器寻址相比它的执行周期和代码长度都比较短,IDATA区声明的存储类型标识符为idata,指内部的256字节的存储区,但是只能间接寻址,速度比直接寻址慢。声明举例如下:unsigned char idata system_status=0;unsigned int idata unit_id2;char idata inp_string16;float idata outp_value;PDATA和XDATA区 PDATA和XDATA区属于外部存储区,外部数据区是可读写的存储区,最多可有64KB,当然这些地址不是必须用作存储区的。访问外部数据存储区比访问内部数据存储区慢,因为外部数据存储区是通过数据指针加载地址来间接访问的。在这两个区,变量的声明和其他区的语法是一样的,但PDATA区只有256字节而XDATA可达65536字节。对PDATA和XDATA的操作是相似的;对PDATA区的寻址比对XDATA区的寻址要快,因为对PDATA区寻址只需装入8位地址,而对XDATA区寻址需装入16位地址,所以尽量把外部数据存储在PDATA段中。PDATA和XDATA区声明中的存储类型标识符分别为pata和xdata,xdata存储类型标识符可以指定外部数据区64KB的任何地址,而pdata存储类型标识符仅指定一页或256字节的外部数据区。声明举例如下:unsigned char xdata system_status=0;unsigned int pdata unit_id2;char xdata inp_string16;float pdata outp_value;外部地址段中除了包含存储器第之外,还包含I/O器件的地址,对外部器件寻址可通过指针或51提供的宏,使用宏对外部器件进行寻址更具可读性。宏声明使得存储区看上去像char和int类型的数据组,下面是一些绝对寄存器寻址的例子:inp_byteXBYTE0x8500;从地址8500H读一字节inp_wordXWORD0x4000;从地址4000H读一字节c=*(char xdata *)0x0000);从地址0000H读一字节XBYTE0x7500=out_val;写一字节到7500H如果要对BDATA和BIT段之外的其他数据区寻址,则要包含头文件absacc.h,并采用以上方法寻址。CODE区 程序存储区CODE的数据是不可改变的,跳转向量和状态表对CODE段的访问和对XDATA区的访问时间是一样的。编译的时候要对程序存储区中的对象进行初始化,否则就会产生错误。程序存储区CODE声明中的标识符为code,在C51编译器中可用code存储区类型标识符来访问程序存储区。下面是程序存储区声明的例子:unsigned char code a = 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15;存储器模式存储器模式是函数自变量、自动变量和没有明确规定存储类型的变量的默认存储器类型。指定存储器类型需要在命令中使用SMALL、COMPACT和LARGE3个控制命令中的1个,例如:void fun1(void) small ;SMALL在该模式中,所有变量都默认地位于51内部数据存储器,这和使用data指定存储器类型的方式一样。在此模式下,变量访问的效率很高,但所有的数据对象和堆栈必须适合内部RAM。确定堆栈的大小是很关键的,因为使用的堆栈空间是由不同函数嵌套的深度决定的。通常,如果BL51连接器/定位器将变量都配置在内部数据存储器内,则SMALL模型是最佳选择。COMPACT 当使用COMPACT模式时,所有变量都被默认为在外部数据存储器的页内,这和使用pdata指定存储器类型是一样的。该存储器类型适用于变量不超过256字节的情况,此限制是由于寻址方式所决定的;和SMALL模式相比,该存储模型的效率比较低,对变量的访问速度也慢一些。但是比LARGE模式快。LARGE 在LARGE模式中,所有的变量都默认为位于外部数据存储器(这和使用xdata指定存储器类型是一样的),并使用数据指针DPTR进行寻址。通过数据指针访问外部数据存储器的效率低,特别是当变量为2字节或更多字节时,该模式要比SMALL和COMPACT产生更多的代码。特殊功能寄存器(SFR)51单片机提供128字节的SFR寻址区,地址为80HFFH。51单片机,除了程序计数器PC和4组通用寄存器组之外,其他所有的寄存器均为SFR,并位于片内的特殊寄存器区。这个区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、I/O及其他部件。特殊功能寄存器可由以下几种关键字说明:(1)sfr 声明字节寻址的特殊功能寄存器,比如 “sfr P0=0x80;”表示P0口的地址为80H。注意:“sfr”后面必须跟一特殊寄存器名:“”后面的地址必须是常数,不允许带有运算符的表达式。这个常数的范围必须在特殊功能寄存器地址范围内,位于0x80H到0xFFH之间。(2)sfr16 许多新的8051派生系列单片机用两个连续地址来确定SFR来指定16位值,例如8052用地址0xCC和0xCD表示定时器/计数器2的低和高字节,如sfr16 T20xCC;表示T2口地址的低地址T2L0xCC,高地址T2H=0xCD。sfr16声明和sfr声明遵循相同的原则,任何符号名都可用在sfr16的声明中。声明中名字后面不是赋值语句。而是一个SFR地址,其高字节必须位于低字节之后。这种声明适用于所有的SFR,但不能用于定时/计数器0和计数器1。(3)sbit 声明可位寻址的特殊功能寄存器和别的可位寻址的目标。“”后将绝对地址赋给变量名,3种变量名声明形式如下:sfr_nameint_constan该变量用一个已声明的sfr sfr_name作为sbit的基地址(SFR的地址必须能被8整除)。“”后面的表达式指定了位的位置,必须是07之间的一个数字,例如:sfr PSW=0XD0;sfr IE=0XA8;sbit OV=PSW2;sbit EA=IE7;int_constantint_constant该变量用一个整常数作为sbit的基地址,基地址必须能被8整除。“”后面的表达式指定位的位置,必须在07之间。例如:sbit OV=0xD02;sbit CY=0xD07;int_constant该变量是一个sbit的绝对位地址,例如:sbit OV=0xD0;sbit CY=0xD0;特殊功能位代表一个独立的声明类,它不能和别的位声明或位域互换,sbit数据类型可以用来访问用bdata存储类型标识符声明的变量的位。不是所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《宾语从句的用法与结构:八年级英语教学教案》
- 网络与生活的利弊辩论议论文类作文(13篇)
- 2025中考作文冲刺-布局谋篇 课件
- 电动汽车设计与制造-课件 第11章 线控底盘构成和设计
- 人教版四年级数学三位数乘两位数《末尾有零的乘法》
- 顾客心理在新零售环境中的洞察与应用
- 项目管理新手必 备从规划到执行的流程与技巧
- 顾客数据分析在提升忠诚度中的应用
- 非物质文化遗产在办公楼宇设计中的艺术表现
- 项目管理中的数据分析与决策技巧
- 超微细粉体与复合化技术之一(粉体与粉体加工技术)
- Unit 1 A New Start School clubs Making a plan课件 -2023-2024学年高中英语外研版(2019)必修第一册
- (完整版)土的参数换算(计算饱和重度)
- 第一讲 马克思主义中国化时代化新的飞跃PPT习概论2023优化版教学课件
- 2023届四川省乐山市市中区四年级数学第二学期期末考试试题含解析
- 国开2023春《语言学概论》形考任务1-3+大作业参考答案
- 注塑混料记录表
- 2023年住院医师规范化培训-住院医师规范化培训(口腔内科)考试上岸提分历年高频考题答案
- 大学物理(一)智慧树知到答案章节测试2023年湖南大学
- 个人禁止工作日期间饮酒承诺书3篇
- 2023年中山市轨道交通有限公司招聘笔试题库及答案解析
评论
0/150
提交评论