C51编程基础课件.ppt

上传人(卖家):三亚风情 文档编号:2941887 上传时间:2022-06-13 格式:PPT 页数:130 大小:2.51MB
下载 相关 举报
C51编程基础课件.ppt_第1页
第1页 / 共130页
C51编程基础课件.ppt_第2页
第2页 / 共130页
C51编程基础课件.ppt_第3页
第3页 / 共130页
C51编程基础课件.ppt_第4页
第4页 / 共130页
C51编程基础课件.ppt_第5页
第5页 / 共130页
点击查看更多>>
资源描述

1、4 4 单片机单片机C C语言及程序设计语言及程序设计4.1 C51概述概述4.2 C51数据类型及存储数据类型及存储4.3 C51变量的定义及数变量的定义及数据存储区域据存储区域4.4 C51位变量的定义位变量的定义4.5 C51特殊功能寄存器特殊功能寄存器的定义的定义4.6 C51指令的定义指令的定义4.7 C51的输入的输入/输出输出4.8 C51函数的定义函数的定义4.9 C51与汇编语言与汇编语言混合编程混合编程目目 录录第第4 4章章 单片机单片机C C语言及程序设计语言及程序设计本章内容的安排,认为读者已经学习过本章内容的安排,认为读者已经学习过C C语言,具有语言,具有C C语

2、言语言的基本知识,因此,本章内容完全是结合单片机来讲解,也就的基本知识,因此,本章内容完全是结合单片机来讲解,也就是补充是补充C C语言在单片机方面的概念、数据定义和函数定义等。语言在单片机方面的概念、数据定义和函数定义等。通过本章学习,使读者能够比较顺利地编写通过本章学习,使读者能够比较顺利地编写C51C51程序。程序。 4.1 C514.1 C51概述概述主要内容主要内容4.1.1 C4.1.1 C语言编程的优势语言编程的优势4.1.2 C514.1.2 C51与与ANSI CANSI C的区别的区别4.1.3 C514.1.3 C51扩展的关键字扩展的关键字4.1 C514.1 C51概

3、述概述学习单片机学习单片机C C语言的必要性语言的必要性随着单片机性能的不断提高,随着单片机性能的不断提高,C C语言编译调试工具的不断完善,语言编译调试工具的不断完善,以及现在对单片机产品辅助功能的要求、对开发周期不断缩短的要以及现在对单片机产品辅助功能的要求、对开发周期不断缩短的要求,使得越来越多的单片机编程人员转向使用求,使得越来越多的单片机编程人员转向使用C C语言,因此有必要在语言,因此有必要在单片机课程中讲授单片机课程中讲授“单片机单片机C C语言语言”。 “ “C51”C51”概念:为了与概念:为了与ANSI CANSI C区别,把区别,把“单片机单片机C C语言语言”称为称为“

4、C51”C51”,也称为,也称为“Keil C”Keil C”。 4.1.1 C4.1.1 C语言编程的优势语言编程的优势在编程方面,使用在编程方面,使用C51C51较汇编语言有诸多优势:较汇编语言有诸多优势:1 1)编程容易)编程容易 2 2)容易实现复杂的数值计算)容易实现复杂的数值计算3 3)容易阅读与交流)容易阅读与交流4 4)容易调试与维护程序)容易调试与维护程序5 5)容易实现模块化开发)容易实现模块化开发 6 6)程序可移植性好)程序可移植性好 4.1.2 C4.1.2 C语言与语言与ANSI ANSI 的区别的区别用汇编语言编写单片机程序时,必须要考虑其存储器的结构,尤用汇编语

5、言编写单片机程序时,必须要考虑其存储器的结构,尤其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,其要考虑其片内数据存储器、特殊功能寄存器是否正确合理的使用,以及按照实际地址端口数据的处理。以及按照实际地址端口数据的处理。用用C51C51编写程序,虽然不像汇编语言那样需要具体地组织、分配编写程序,虽然不像汇编语言那样需要具体地组织、分配存储器资源,但是存储器资源,但是C51C51对数据类型和变量的定义,必须要与单片机的对数据类型和变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。存储结构相关联,否则编译器不能正确地映射定位。 4.1.2 C4.1.2 C语言与

6、语言与ANSI ANSI 的区别的区别用用C51C51编写单片机程序,与用编写单片机程序,与用ANSI CANSI C编写程序的不同之处是,需编写程序的不同之处是,需要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。要根据单片机存储器结构及内部资源,定义相应的数据类型和变量。其它的语法规定、程序结构及程序设计方法,都与其它的语法规定、程序结构及程序设计方法,都与ANSI CANSI C相同。相同。所以本章主要介绍所以本章主要介绍C51C51各种变量的定义、指针定义、函数定义和混合各种变量的定义、指针定义、函数定义和混合编程。编程。 4.1.3 C514.1.3 C51扩展的关键字扩展

7、的关键字由于单片机在结构及编程上的特殊要求,由于单片机在结构及编程上的特殊要求,C51C51有自己的特殊关键有自己的特殊关键字,称之为字,称之为C51C51扩展的关键字,下面给出常用的扩展的关键字,下面给出常用的C51C51扩展的关键字。扩展的关键字。_at_at_bdatabdatabit bit codecodedatadataidataidata interruptinterruptpdatapdatareentrant reentrant sbitsbitsfrsfrsfr16sfr16usingusingvolatilevolatilexdataxdata这些关键字在后面会陆续接触到

8、,此处先不给出它们的含义。这些关键字在后面会陆续接触到,此处先不给出它们的含义。 4.2 C514.2 C51数据类型及存储数据类型及存储主要内容主要内容4.2.1 C514.2.1 C51的数据类型的数据类型4.2.2 C514.2.2 C51数据的存储数据的存储4.2.1 C514.2.1 C51的数据类型的数据类型表表4-1 C51数据类型、长度和数值范围数据类型、长度和数值范围数据类型数据类型表示方法表示方法长长 度度数数 值值 范范 围围无符号字符型无符号字符型 unsigned char 1字节字节 0255有符号字符型有符号字符型 signed char1字节字节 - -1281

9、27无符号整型无符号整型unsigned int2字节字节 065535有符号整型有符号整型signed int2字节字节 - -3276832767无符号长整型无符号长整型 unsigned long 4字节字节 04294967295有符号长整型有符号长整型 signed long4字节字节 - -21474836482147483647浮点型浮点型float4字节字节 1.1755E-383.40E+38特殊功能寄特殊功能寄存器型存器型sfrsfr161字节字节2字节字节0255065535位类型位类型bit、sbit1位位0或或14.2.1 C514.2.1 C51的数据类型的数据类型

10、数据类型转换数据类型转换1 1)自动转换)自动转换转换规则是向高精度数据类型转换、向有符号数据类型转换。如转换规则是向高精度数据类型转换、向有符号数据类型转换。如字符型变量与整型变量相加时,则位变量先转换字符型或整型数据,字符型变量与整型变量相加时,则位变量先转换字符型或整型数据,然后相加。然后相加。2 2)强制转换)强制转换像像ANSI CANSI C一样,通过强制类型转换的方式进行转换。如:一样,通过强制类型转换的方式进行转换。如:unsignedunsigned intintb;b;floatfloatc;c;b=(int)c;b=(int)c; 4.2.2 C514.2.2 C51数据

11、的存储数据的存储MCS-51MCS-51单片机只有单片机只有bitbit和和unsigned charunsigned char两种数据类型支持机器两种数据类型支持机器指令,而其它类型的数据都需要转换成指令,而其它类型的数据都需要转换成bitbit或或unsigned charunsigned char型进行型进行存储。存储。为了减少单片机的存储空间和提高运行速度,要尽可能地使用为了减少单片机的存储空间和提高运行速度,要尽可能地使用unsigned charunsigned char型数据。型数据。 一、位变量的存储一、位变量的存储bitbit和和sbitsbit型位变量,直接存于型位变量,直

12、接存于RAMRAM的位寻址空间,包括低的位寻址空间,包括低128128位位和特殊功能寄存器位。和特殊功能寄存器位。 4.2.2 C514.2.2 C51数据的存数据的存储储二、字符变量的存储二、字符变量的存储字符变量(字符变量(charchar):无论是):无论是unsigned charunsigned char数据还是数据还是signed signed charchar数据,均为数据,均为1 1个字节,能够被直接存储在个字节,能够被直接存储在RAMRAM中,可以存储在中,可以存储在0 00 x7f0 x7f区域,也可以存储在区域,也可以存储在0 x800 x800 xff0 xff区域,与

13、变量的定义有关。区域,与变量的定义有关。unsigned charunsigned char数:可直接被数:可直接被MSC-51MSC-51接受接受signed charsigned char数据:用补码表示。需要额外的操作来测试、处理数据:用补码表示。需要额外的操作来测试、处理符号位,使用的是两种库函数,代码量大,运算速度降低。符号位,使用的是两种库函数,代码量大,运算速度降低。4.2.2 C514.2.2 C51数据的存储数据的存储三、整型变量的存储三、整型变量的存储整型变量(整型变量(intint):不管是):不管是unsigned intunsigned int数数据还是据还是sign

14、ed intsigned int数据,均为数据,均为2 2个字节,其存个字节,其存储方法是高位字节保存在低地址(在前面),储方法是高位字节保存在低地址(在前面),低位字节保存在高地址(在后面)低位字节保存在高地址(在后面) 。例如,整型变量的值为例如,整型变量的值为0 x12340 x1234,在内存,在内存中的存放如右图所示。中的存放如右图所示。signed intsigned int数据用补码表示。数据用补码表示。地址地址低低高高:1234:4.2.2 C514.2.2 C51数据的存储数据的存储四、长四、长整型变量的存储整型变量的存储长整型变量(长整型变量(longlong)为)为4 4

15、个字节,其存储方个字节,其存储方法与整型数据一样,是最高位字节保存的地址法与整型数据一样,是最高位字节保存的地址最低(在最前面),最低位字节保存的地址最最低(在最前面),最低位字节保存的地址最高(在最后面)。高(在最后面)。如长整型变量的值为如长整型变量的值为0 x123456780 x12345678,在内,在内存中的存放方法如右图所示。不管是存中的存放方法如右图所示。不管是unsigned longunsigned long数据还是数据还是signed longsigned long数据。数据。地址地址低低高高:12345678:4.2.2 C514.2.2 C51数据的存储数据的存储五、

16、浮点五、浮点型变量的存储型变量的存储浮点型变量(浮点型变量(floadfload)占)占4 4个字节,用指数方式表示,其具体格个字节,用指数方式表示,其具体格式与编译器有关。式与编译器有关。对于对于Keil CKeil C,采用的是,采用的是IEEE-754IEEE-754标准,具有标准,具有2424位精度,尾数的位精度,尾数的最高位始终为最高位始终为1 1,因而不保存。具体分布为:,因而不保存。具体分布为:1 1位符号位,位符号位,8 8位阶码位,位阶码位,2323位尾数,如下图所示。位尾数,如下图所示。 字节地址字节地址0123浮点数浮点数内容内容SEEEEEEEEMMMMMMMMMMMM

17、MMMMMMMMMMM符号和阶码符号和阶码 尾数高位尾数高位尾数低位尾数低位4.2.2 C514.2.2 C51数据的存储数据的存储符号位符号位S S:1 1表示负数,表示负数,0 0表示正数。表示正数。阶码:用移码表示。如,实际阶码阶码:用移码表示。如,实际阶码-126-126用用1 1表示,实际阶码表示,实际阶码0 0用用127127表示,即实际阶码数加上表示,即实际阶码数加上127127得到阶码的表达数。得到阶码的表达数。阶码数值范围:阶码数值范围:-126-126+128+128。4.2.2 C514.2.2 C51数据的存储数据的存储例如浮点数例如浮点数-12.5-12.5符号位为符

18、号位为1 1,12.512.5的二进制数为的二进制数为1100.1=1.1001E+00111100.1=1.1001E+0011,阶码数值为阶码数值为3+127=130=10000010B3+127=130=10000010B,尾数为尾数为10011001。因此,其十六进制数为因此,其十六进制数为0 xC14800000 xC1480000,则存储结构如右图所示。则存储结构如右图所示。 地址地址低低高高:C1480000:说明:教材中存储结构是错的。说明:教材中存储结构是错的。4.3 C514.3 C51变量的定义及数据存储区域变量的定义及数据存储区域主要内容主要内容4.3.1 C514.3

19、.1 C51变量的定义变量的定义4.3.2 C514.3.2 C51变量的存储类型变量的存储类型4.3.3 C514.3.3 C51变量的存储区域变量的存储区域4.3.4 C514.3.4 C51变量定义举例变量定义举例4.3.5 C514.3.5 C51变量的存储模式变量的存储模式4.3.6 C514.3.6 C51变量的绝对定位变量的绝对定位4.3.1 C514.3.1 C51变量的定义变量的定义C51C51变量定义的一般格式为:变量定义的一般格式为: 存储类型存储类型 数据类型数据类型 存储区存储区 变量名变量名1=1=初值初值 , ,变量名变量名2=2=初值初值 , ,或或 存储类型存

20、储类型 存储区存储区 数据类型数据类型 变量名变量名1=1=初值初值 , ,变量名变量名2=2=初值初值 , ,可见变量(非位变量)的定义由可见变量(非位变量)的定义由4 4部分组成,即在变量定义时,部分组成,即在变量定义时,指定变量指定变量4 4种属性。种属性。数据类型:在前面的数据类型:在前面的4.24.2中已经叙述过,对于变量名也无须多说,中已经叙述过,对于变量名也无须多说,下面主要解释下面主要解释“存储类型存储类型”和和“存储区存储区”等概念。等概念。 4.3.2 C514.3.2 C51变量的存储类型变量的存储类型存储类型这个属性我们仍沿用存储类型这个属性我们仍沿用ANSI CANS

21、I C的说法,尽量不改变原来的的说法,尽量不改变原来的含义。含义。按照按照ANSI CANSI C,C C语言的变量有语言的变量有4 4种存储类型:种存储类型:动态存储(动态存储(autoauto)静态存储(静态存储(staticstatic)全局存储(全局存储(externextern)寄存器存储(寄存器存储(registerregister) 4.3.2 C514.3.2 C51变量的存储类型变量的存储类型一、动态存储一、动态存储动态(存储)变量:用动态(存储)变量:用autoauto定义的为动态变量,也叫自动变量。定义的为动态变量,也叫自动变量。作用范围:在定义它的函数内或复合语句内部。

22、作用范围:在定义它的函数内或复合语句内部。当定当定义它的函数或复合语句执行时,义它的函数或复合语句执行时,C51C51才为变量分配存储空间,结束时才为变量分配存储空间,结束时所占用的存储空间释放。所占用的存储空间释放。定义变量时,定义变量时,autoauto可以省略,或者说如果省略了存储类型项,则可以省略,或者说如果省略了存储类型项,则认为是动态变量。动态变量一般分配使用寄存器或堆栈。认为是动态变量。动态变量一般分配使用寄存器或堆栈。 4.3.2 C514.3.2 C51变量的存储类型变量的存储类型二、静态存储二、静态存储静态(存储)变量:用静态(存储)变量:用staticstatic定义的为

23、静态变量。分为内部静态定义的为静态变量。分为内部静态和外部静态变量。和外部静态变量。内部静态变量:在函数体内定义的为内部静态变量。内部静态变量:在函数体内定义的为内部静态变量。在函数内可在函数内可以任意使用和修改,函数运行结束后会一直存在,但在函数外不可以任意使用和修改,函数运行结束后会一直存在,但在函数外不可见,即在函数体外得到保护。见,即在函数体外得到保护。外部静态变量:在函数体外部定义的为外部静态变量。在定义的外部静态变量:在函数体外部定义的为外部静态变量。在定义的文件内可以任意使用和修改,外部静态变量会一直存在,但在文件文件内可以任意使用和修改,外部静态变量会一直存在,但在文件外不可见

24、,即在文件外得到保护。外不可见,即在文件外得到保护。 4.3.2 C514.3.2 C51变量的存储类型变量的存储类型三、外部存储三、外部存储外部(存储)变量:用外部(存储)变量:用externextern声明的变量为外部变量,是在其它声明的变量为外部变量,是在其它文件定义过的全局变量。文件定义过的全局变量。用用externextern声明后,便可以在所声明的文声明后,便可以在所声明的文件中使用。件中使用。需要注意的是:在定义变量时,即便是全局变量,也不能使用需要注意的是:在定义变量时,即便是全局变量,也不能使用externextern定义。定义。 4.3.2 C514.3.2 C51变量的存

25、储类型变量的存储类型四、寄存器存储四、寄存器存储寄存器(存储)变量:用寄存器(存储)变量:用registerregister定义的变量为寄存器变量。定义的变量为寄存器变量。寄存器变量存放在寄存器变量存放在CPUCPU的寄存器中,这种变量处理速度快,但数的寄存器中,这种变量处理速度快,但数目少。目少。C51C51中的寄存器变量:中的寄存器变量: C51C51的编译器在编译时,能够自动识别程的编译器在编译时,能够自动识别程序中使用频率高的变量,并将其安排为寄存器变量,用户不用专门序中使用频率高的变量,并将其安排为寄存器变量,用户不用专门声明。声明。 4.3.3 C514.3.3 C51变量的存储区

26、域变量的存储区域变量的存储区属性是单片机扩展的概念,非常重要,它涉及到变量的存储区属性是单片机扩展的概念,非常重要,它涉及到7 7个新的关键字。个新的关键字。MCS-51MCS-51单片机有四个存储空间,分成三类,它们是片内数据存储单片机有四个存储空间,分成三类,它们是片内数据存储空间、片外数据存储空间和程序存储空间。空间、片外数据存储空间和程序存储空间。 MCS-51MCS-51单片机有更多的存储区域:由于片内数据存储器和片外单片机有更多的存储区域:由于片内数据存储器和片外数据存储器又分成不同的区域,所以单片机的变量有更多的存储区数据存储器又分成不同的区域,所以单片机的变量有更多的存储区域。

27、域。在定义变量时,必须明确指出是存放在哪个区域。在定义变量时,必须明确指出是存放在哪个区域。4.3.3 C514.3.3 C51变量的存储区域变量的存储区域表表4-2 C51存储区与存储空间的对应关系存储区与存储空间的对应关系关键字关键字对应的存储空间及范围对应的存储空间及范围codeROM空间,空间,64KB全空间全空间data片内片内RAM,直接寻址,低,直接寻址,低128字节字节bdata片内片内RAM,位寻址区,位寻址区0 x200 x2f,可字节访问,可字节访问idata 片内片内RAM,间接寻址,间接寻址,256字节,与字节,与 Ri 对应对应pdata片外片外RAM,分页寻址的,

28、分页寻址的256字节字节(P2不变不变), P2改变可寻址改变可寻址64KB全空间,与全空间,与MOVX Ri 对应对应xdata片外片外RAM,64KB全空间全空间bit片内片内RAM位寻找区位寻找区,位地址位地址0 x000 x7f,128位位4.3.4 C514.3.4 C51变量定义举例变量定义举例1 1)定义存储在)定义存储在datadata区域的动态区域的动态unsigned charunsigned char变量:变量:unsigned char data sec=0, min=0, hou=0;unsigned char data sec=0, min=0, hou=0;2 2

29、)定义存储在)定义存储在datadata区域的静态区域的静态unsigned charunsigned char变量:变量:static unsigned char data scan_code=0 xfe;static unsigned char data scan_code=0 xfe;3 3)定义存储在)定义存储在datadata区域的静态区域的静态unsigned intunsigned int变量:变量:static unsigned int data dd;static unsigned int data dd;4.3.4 C514.3.4 C51变量定义举例变量定义举例4 4)定

30、义存储在)定义存储在bdatabdata区域的动态区域的动态unsigned charunsigned char变量:变量:unsigned char bdata operate, operate1;unsigned char bdata operate, operate1;/定义指示操作的可位寻址的变量定义指示操作的可位寻址的变量5 5)定义存储在)定义存储在idataidata区域的动态区域的动态unsigned charunsigned char数组:数组:unsigned char idata temp20; unsigned char idata temp20; 6 6)定义在)定义

31、在pdatapdata区域的动态有符号区域的动态有符号intint数组:数组:int pdata send_data30;int pdata send_data30;/定义存放发送数据的数组定义存放发送数据的数组 4.3.4 C514.3.4 C51变量定义举例变量定义举例7 7)定义存储在)定义存储在xdataxdata区域的动态区域的动态unsigned intunsigned int数组:数组:unsigned int xdata receiv_buf50;unsigned int xdata receiv_buf50;/定义存放接受数据的数组定义存放接受数据的数组8 8)定义存储在)定

32、义存储在codecode区域的区域的unsigned charunsigned char数组:数组:unsigned char code dis_code10=unsigned char code dis_code10=0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66,0 x3f, 0 x06, 0 x5b, 0 x4f, 0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /定义共阴极数码管段码数组定义共阴极数码管段码数组4.3.5 C514.3.5 C51变量的存储模式变量的存储模式存储模式

33、:如果在定义变量时缺省了存储区属性,则编译器会自存储模式:如果在定义变量时缺省了存储区属性,则编译器会自动选择默认的存储区域,也就是存储模式。动选择默认的存储区域,也就是存储模式。变量的存储模式也就是程序(或函数)的编译模式。变量的存储模式也就是程序(或函数)的编译模式。编译模式分为三种:小模式(编译模式分为三种:小模式(smallsmall)、紧凑模式()、紧凑模式(compactcompact)和)和大模式(大模式(largelarge)。编译模式由编译控制命令决定。)。编译模式由编译控制命令决定。存储模式(编译模式)决定了变量的默认存储区域和参数的传递存储模式(编译模式)决定了变量的默认

34、存储区域和参数的传递方法。方法。 4.3.5 C514.3.5 C51变量的存储模式变量的存储模式一、一、smallsmall模式模式在在smallsmall模式下,变量的默认存储区域是模式下,变量的默认存储区域是“data”data”、“idata”idata”,即未指出存储区域的变量保存到片内数据存储器中,并且堆栈也安排即未指出存储区域的变量保存到片内数据存储器中,并且堆栈也安排在该区域中。在该区域中。smallsmall模式的特点:存储容量小,但速度快。模式的特点:存储容量小,但速度快。在在smallsmall模式下参数的传递:通过寄存器、堆栈或片内数据存储模式下参数的传递:通过寄存器、

35、堆栈或片内数据存储区完成的。区完成的。 4.3.5 C514.3.5 C51变量的存储模式变量的存储模式二、二、compactcompact模式模式在在compactcompact模式下,变量的默认存储区域是模式下,变量的默认存储区域是“pdata”pdata”,即未指出,即未指出存储区域的变量保存到片外数据存储器的一页中,最大变量数为存储区域的变量保存到片外数据存储器的一页中,最大变量数为256256字节,并且堆栈也安排在该区域中。字节,并且堆栈也安排在该区域中。compactcompact模式的其特点:是存储容量较模式的其特点:是存储容量较smallsmall模式大,速度较模式大,速度较s

36、mallsmall模式稍慢,但比模式稍慢,但比largelarge模式要快。模式要快。在在compactcompact模式下参数的传递:通过片外数据区的一个固定页完模式下参数的传递:通过片外数据区的一个固定页完成的。成的。 4.3.5 C514.3.5 C51变量的存储模式变量的存储模式三、三、largelarge模式模式在在largelarge模式下,变量的默认存储区域是模式下,变量的默认存储区域是“xdata”xdata”,即未指出存,即未指出存储区域的变量保存到片外数据存储器,最大变量数可达储区域的变量保存到片外数据存储器,最大变量数可达64KB64KB,并且堆,并且堆栈也安排在该区域中

37、。栈也安排在该区域中。largelarge模式的特点:存储容量大,速度慢模式的特点:存储容量大,速度慢largelarge模式下参数的传递方式:参数的传递也是通过片外数据存模式下参数的传递方式:参数的传递也是通过片外数据存储器完成的。储器完成的。 4.3.5 C514.3.5 C51变量的存储模式变量的存储模式C51C51支持混合模式:即可以对函数设置编译模式,所以在支持混合模式:即可以对函数设置编译模式,所以在largelarge模模式下,可以对某些函数设置为式下,可以对某些函数设置为compactcompact模式或模式或smallsmall模式,从而提高运模式,从而提高运行速度。行速度。

38、默认编译模式:如果文件或函数未指明编译模式,则编译器按默认编译模式:如果文件或函数未指明编译模式,则编译器按smallsmall模式处理。模式处理。编译模式控制命令:编译模式控制命令: “ “#pragma small(#pragma small(或或compactcompact、large)”large)”应应放在文件的开始。放在文件的开始。 4.3.6 C514.3.6 C51变量的绝对定位变量的绝对定位C51C51有三种方式可以对变量(有三种方式可以对变量(I/OI/O端口)绝对定位:绝对定位关键端口)绝对定位:绝对定位关键字字_at_ _at_ 、指针、库函数的绝对定位宏。、指针、库函

39、数的绝对定位宏。对于后两种方式,在后对于后两种方式,在后面指针一节介绍。面指针一节介绍。C51C51扩展的关键字扩展的关键字_at_at_专门用于对变量作绝对定位,专门用于对变量作绝对定位,_at_at_使用在使用在变量的定义中,其格式为:变量的定义中,其格式为: 存储类型存储类型 数据类型数据类型 存储区存储区 变量名变量名1 1 _at_ _at_ 地址常数地址常数 ,变量名,变量名22 4.3.6 C514.3.6 C51变量的绝对定位变量的绝对定位举例说明举例说明_at_at_的使用方法的使用方法1 1)对)对datadata区域中的区域中的 unsigned charunsigned

40、 char变量变量aaaa作绝对定位:作绝对定位:unsignedunsignedcharchar data aa _at_ 0 x30;data aa _at_ 0 x30;2 2)对)对pdatapdata区域中的区域中的 unsigned intunsigned int数组数组cccc作绝对定位:作绝对定位:unsignedunsignedint pdata cc10 _at_ 0 x34;int pdata cc10 _at_ 0 x34;3 3)对)对xdataxdata区域中的区域中的 unsigned charunsigned char变量变量printer_portprinte

41、r_port作绝对作绝对定位:定位:unsignedunsignedcharchar xdata printer_portxdata printer_port _at_ 0 x7fff; _at_ 0 x7fff; 4.3.6 C514.3.6 C51变量的绝对定位变量的绝对定位对变量绝对定位的几点说明:对变量绝对定位的几点说明:1 1)绝对地址变量在定义时不能初始化,因此不能对)绝对地址变量在定义时不能初始化,因此不能对codecode型变量型变量绝对定位;绝对定位;2 2)绝对地址变量只能够是全局变量,不能在函数中对变量绝对)绝对地址变量只能够是全局变量,不能在函数中对变量绝对定位;定位;

42、3 3)绝对地址变量多用于)绝对地址变量多用于I/OI/O端口,一般情况下不对变量作绝对定端口,一般情况下不对变量作绝对定位;位;3 3)位变量不能使用)位变量不能使用_at_at_绝对定位。绝对定位。4.4 C514.4 C51位变量的定义位变量的定义主要内容主要内容4.4.1 bit4.4.1 bit型位变量的定义型位变量的定义4.4.2 sbit4.4.2 sbit型位变量的定义型位变量的定义4.4.1 bit4.4.1 bit型位变量的定义型位变量的定义常说的位变量指的就是常说的位变量指的就是bitbit型位变量。型位变量。C51C51的的bitbit型位变量定义型位变量定义的一般格式

43、为:的一般格式为: 存储类型存储类型 bit bit 位变量名位变量名1=1=初值初值 ,位变量名,位变量名2=2=初值初值 ,bitbit位变量被保存在位变量被保存在RAMRAM中的位寻址区域(字节地址为中的位寻址区域(字节地址为0 x200 x200 x2f0 x2f,1616字节)。字节)。例如:例如:bitbitflag_runflag_run,receiv_bit=0receiv_bit=0;static bitstatic bitsend_bitsend_bit; 4.4.1 bit4.4.1 bit型位变量的定义型位变量的定义两点说明:两点说明:1 1)bitbit型位变量与其它

44、变量一样,可以作为函数的形参,也可型位变量与其它变量一样,可以作为函数的形参,也可以作为函数的返回值,即函数的类型可以是位型的;以作为函数的返回值,即函数的类型可以是位型的;2 2)位变量不能定义指针,不能定义数组。)位变量不能定义指针,不能定义数组。 4.4.2 sbit4.4.2 sbit型位变量的定义型位变量的定义对于能够按位寻址的特殊功能寄存器、定义在位寻址区域的变对于能够按位寻址的特殊功能寄存器、定义在位寻址区域的变量(字节型、整型、长整型),可以对其各位用量(字节型、整型、长整型),可以对其各位用sbitsbit定义位变量。定义位变量。为了方便起见,分开讨论按位寻址的特殊功能寄存器

45、中位变量为了方便起见,分开讨论按位寻址的特殊功能寄存器中位变量的定义、按位寻址的变量中位变量的定义。的定义、按位寻址的变量中位变量的定义。4.4.2 sbit4.4.2 sbit型位变量的定义型位变量的定义一、特殊功能寄存器中位变量定义一、特殊功能寄存器中位变量定义能够按位寻址的特殊功能寄存器中位变量定义的一般格式为:能够按位寻址的特殊功能寄存器中位变量定义的一般格式为:sbitsbit 位变量名位变量名 位地址表达式位地址表达式这里的位地址表达式有三种形式:这里的位地址表达式有三种形式:直接位地址直接位地址特殊功能寄存器名带位号特殊功能寄存器名带位号字节地址带位号字节地址带位号4.4.2 s

46、bit4.4.2 sbit型位变量的定义型位变量的定义1 1、用直接位地址定义位变量、用直接位地址定义位变量这种情况下位变量的定义格式为:这种情况下位变量的定义格式为:sbitsbit 位变量名位变量名 位地址常数位地址常数这里的位地址常数范围为这里的位地址常数范围为0 x800 x800 xff0 xff,实际是定义特殊功能寄,实际是定义特殊功能寄存器的位。例如:存器的位。例如:sbitsbitP0_0=0 x80; P0_0=0 x80; sbitsbitP1_1=0 x91;P1_1=0 x91;sbitsbitRS0=0 xd3; RS0=0 xd3; /定义定义PSWPSW的第的第3

47、 3位位sbitsbitET0=0 xa9; ET0=0 xa9; /定义定义IEIE的第的第1 1位位 4.4.2 sbit4.4.2 sbit型位变量的定义型位变量的定义2 2、特殊功能寄存器名带位号定义、特殊功能寄存器名带位号定义这时位变量的定义格式为:这时位变量的定义格式为:sbitsbit 位变量名位变量名 特殊功能寄存器名特殊功能寄存器名 位号常数位号常数这里的位号常数为这里的位号常数为0 07 7。例如:。例如:sbitsbitP0_3=P03; P0_3=P03; sbitsbitP1_4=P14;P1_4=P14;sbitsbitOV=PSW2; OV=PSW2; /定义定义

48、PSWPSW的第的第2 2位位sbitsbitES=IE4; ES=IE4; /定义定义IEIE的第的第4 4位位 4.4.2 sbit4.4.2 sbit型位变量的定义型位变量的定义3 3、寄存器地址带位号定义位变量、寄存器地址带位号定义位变量在这种情况下位变量的定义格式为:在这种情况下位变量的定义格式为:sbitsbit 位变量名位变量名 特殊功能寄存器地址特殊功能寄存器地址 位号常数位号常数这里的位号常数同上,为这里的位号常数同上,为0 07 7。例如:。例如:sbitsbitP0_6=0 x806; P0_6=0 x806; sbitsbitP1_7=0 x907;P1_7=0 x90

49、7;sbitsbitAC=0 xd06; AC=0 xd06; /定义定义PSWPSW的第的第6 6位位sbitsbitEA=0 xa87;EA=0 xa87;/定义定义IEIE的第的第7 7位位 4.4.2 sbit4.4.2 sbit型位变量的定义型位变量的定义4 4、几点说明、几点说明1 1)用)用sbitsbit定义的位变量,必须能够按位操作,定义的位变量,必须能够按位操作,而不能够对无位操作功能的位定义位变量。而不能够对无位操作功能的位定义位变量。2 2)用)用sbitsbit定义位变量,必须放在函数外面作为定义位变量,必须放在函数外面作为全局位变量,而不能在函数内部定义。全局位变量

50、,而不能在函数内部定义。3 3)用)用sbitsbit每次只能定义一个位变量。每次只能定义一个位变量。4 4)对其它模块定义的位变量()对其它模块定义的位变量(bitbit型或型或 sbitsbit型)型)的引用声明,都使用的引用声明,都使用bitbit。5 5)用)用sbitsbit定义的是一种绝对定位的位变量(因定义的是一种绝对定位的位变量(因为名字是与确定位地址对应的),具有特定的意义,为名字是与确定位地址对应的),具有特定的意义,在应用时不能像在应用时不能像bitbit型位变量那样随便使用。型位变量那样随便使用。4.4.2 sbit4.4.2 sbit型位变量的型位变量的定义定义二、位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(C51编程基础课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|