C51语言程序设计基础.pptx
《C51语言程序设计基础.pptx》由会员分享,可在线阅读,更多相关《C51语言程序设计基础.pptx(126页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3.1 C513.1 C51的数据的数据3.1.1 3.1.1 数据类型数据类型 3.1.23.1.2 常量与变量常量与变量3.1.3 3.1.3 数据存储类型数据存储类型3.1.4 3.1.4 局部变量与全局变量局部变量与全局变量 第1页/共126页3.1.1 3.1.1 数据类型数据类型第2页/共126页3.1.2 3.1.2 常量与变量常量与变量1 1常量常量 C51 C51语言中的常量是不接受程序修改的固定值,常量可以是任意数据类型。语言中的常量是不接受程序修改的固定值,常量可以是任意数据类型。C51C51中的常量有中的常量有整型常量、实型常量、字符型常量、字符串常量符号常量整型常量、
2、实型常量、字符型常量、字符串常量符号常量等。等。第3页/共126页(1 1)整型常量)整型常量第4页/共126页 在整型常量后加一个字母在整型常量后加一个字母“L L”或或“l l”,表示,表示该数位长整型。例如该数位长整型。例如23L23L、0Xfd4l0Xfd4l等。等。如果需要的是负值,则必须将负号如果需要的是负值,则必须将负号“-”放置放置于常量表达式的最前面,例如于常量表达式的最前面,例如-0 x56-0 x56、-9-9等。等。第5页/共126页(2 2)实型常量)实型常量 实型常量又称实型常量又称浮点常量浮点常量,是一个十进制表示的符号实数。实型常量的值包括整数部分、尾数部分和指
3、数部,是一个十进制表示的符号实数。实型常量的值包括整数部分、尾数部分和指数部分。实型常量的形式如下:分。实型常量的形式如下:digits.digitsE+/-digitsdigits.digitsE+/-digits一些实型常量的示例如下:一些实型常量的示例如下:15.7515.75、1.575E11.575E1、1575E-31575E-3、-0.0025-0.0025、-2.5e-3-2.5e-3、25E-425E-4。第6页/共126页(3 3)字符型常量)字符型常量 字符型常量是指用一对字符型常量是指用一对单引号单引号括起来的一个字符。如括起来的一个字符。如aa、99、!等。字符常量中
4、的单引号只起定等。字符常量中的单引号只起定界作用并不表示字符本身。界作用并不表示字符本身。在在C51C51语言中,字符是按其对应的语言中,字符是按其对应的ASCIIASCII码值码值来存储的,来存储的,1 1个字符占个字符占1 1个字节个字节 第7页/共126页(4 4)字符串常量)字符串常量 字符串常量是指用一对双引号括起来的一串字符,双引号只起定界作用,如字符串常量是指用一对双引号括起来的一串字符,双引号只起定界作用,如ChinaChina、123456123456等。等。第8页/共126页(5 5)符号常量)符号常量 C51 C51语言中允许将程序中的常量定义为一个标识符,称为语言中允许
5、将程序中的常量定义为一个标识符,称为符符号常量号常量。符号常量一般使用符号常量一般使用大写大写英文字母表示,以区别于一般用小英文字母表示,以区别于一般用小写字母表示的变量。写字母表示的变量。符号常量在使用前必须符号常量在使用前必须先定义先定义,定义的形式是:,定义的形式是:#define#define 标识符标识符 常量常量#define PI 3.1415926#define PI 3.1415926第9页/共126页2 2变量变量变量的定义:变量的定义:数据类型数据类型 变量名变量名;int i,j,k;int i,j,k;unsigned char si;unsigned char si
6、;unsigned int ui;unsigned int ui;double balance,profit,loss;double balance,profit,loss;C51 C51中常用的:中常用的:bitbit、charchar、intint第10页/共126页(1 1)整型变量()整型变量(intint)1616位数据位数据有符号:有符号:signed int signed int -32 768 -32 76832 767 32 767 无符号:无符号:unsigned intunsigned int 0 065 535 65 535 0 x12340 x1234存储形式存储形式
7、第11页/共126页例例3-1 P50P50(2 2)长整型变量()长整型变量(long intlong int)长整型变量长度是长整型变量长度是3232位,占用位,占用4 4个字节(个字节(bytebyte),其他方面和整型变量(),其他方面和整型变量(intint)相似。)相似。第12页/共126页(3 3)实型变量)实型变量分为单精度(分为单精度(floatfloat)型和双精度()型和双精度(doubledouble)型。)型。其定义形式为:其定义形式为:float x,y;/float x,y;/指定指定x,yx,y为单精度实数为单精度实数 double z;/double z;/指
8、定指定z z为双精度实数为双精度实数 在一般系统中,一个在一般系统中,一个floatfloat型数据在内存中占型数据在内存中占4 4个字节(个字节(3232位),一个位),一个doubledouble型数据占型数据占8 8个字节(个字节(6464位)。单精度实数提供位)。单精度实数提供7 7位有效数字,双精度实数提供位有效数字,双精度实数提供15151616位有效数字。位有效数字。第13页/共126页(5 5)字符变量)字符变量charchar字符变量用来存放字符常量。注意只能存放字符变量用来存放字符常量。注意只能存放1 1个字符。个字符。字符变量的定义形式如下:字符变量的定义形式如下:cha
9、r char 变量名变量名;例如:例如:char c1,c2;char c1,c2;它表示它表示c1c1和和c2c2为字符变量,各存放为字符变量,各存放1 1个字符。可以用下面的语句对个字符。可以用下面的语句对c1c1、c2c2赋值:赋值:c1=a;c2=b;c1=a;c2=b;字符变量的长度是字符变量的长度是1 1字节(字节(bytebyte)即)即8 8位。这很适合于位。这很适合于80518051单片机,因为单片机,因为80518051单片机每次可以处理单片机每次可以处理8 8位数据位数据。第14页/共126页(6 6)位变量()位变量(bitbit)变量的类型是位,位变量的值可以是变量的
10、类型是位,位变量的值可以是1 1(truetrue)或)或0 0(falsefalse)。)。与与80518051硬件特性操作有关的位变量必须定位在硬件特性操作有关的位变量必须定位在80518051单片机片内存储区(单片机片内存储区(RAMRAM)的可位寻址空间中。)的可位寻址空间中。第15页/共126页3 3有符号有符号/无符号问题说明无符号问题说明(1 1)尽量使用无符号变量)尽量使用无符号变量(2 2)在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型:)在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型:#define uchar unsigned ch
11、ar#define uchar unsigned char#define uint unsigned int#define uint unsigned int第16页/共126页3.1.3 3.1.3 数据存储类型数据存储类型 数据时存放在数据时存放在5151单片机的存储器中的,因此要规定数据的存储类型。单片机的存储器中的,因此要规定数据的存储类型。P53 P53 表表3-43-4 常用:常用:datadata、xdataxdata、codecode 另外:另外:bdatabdata第17页/共126页第18页/共126页(1 1)datadata区区datadata区的寻址是最快的,所以应该
12、把经常使区的寻址是最快的,所以应该把经常使用的变量放在用的变量放在datadata区,但是区,但是datadata区的空间是区的空间是有限的,有限的,datadata区除了包含程序变量外,还包区除了包含程序变量外,还包含了堆栈和寄存器组。含了堆栈和寄存器组。datadata区声明中的存储类型标式符为区声明中的存储类型标式符为datadata,通,通常指片内常指片内RAMRAM的低的低128128字节的内部数据存储的字节的内部数据存储的变量,可直接寻址。变量,可直接寻址。声明举例如下:声明举例如下:unsigned char data system_status=0;unsigned int d
13、ata unit_id2;char data inp_string16;第19页/共126页(2)bdatabdatabdata实际是实际是datadata中的位寻址区,在这个区中的位寻址区,在这个区中声明变量就可以进行位寻址。位变量的声中声明变量就可以进行位寻址。位变量的声明对状态寄存器来说是十分有用的,因为它明对状态寄存器来说是十分有用的,因为它可能仅仅需要某一位,而不是整个字节。可能仅仅需要某一位,而不是整个字节。bdatabdata区声明中的存储类型标识符为区声明中的存储类型标识符为bdatabdata,指内部可位寻址的指内部可位寻址的1616字节存储区(字节存储区(20H20H到到2
14、FH2FH),数据类型是可位寻址变量的数据类),数据类型是可位寻址变量的数据类型。型。以下是在以下是在bdatabdata区中声明的位变量和使用位区中声明的位变量和使用位变量的例子:变量的例子:第20页/共126页 unsigned char bdata status_byte;unsigned int bdata status_word;unsigned long bdata status_dword;sbit stat_flag=status_byte4;if(status_word15)stat_flag=1;第21页/共126页(3)idata区idataidata区也可以存放使用比较
15、频繁的变量,使用寄存器作为指针区也可以存放使用比较频繁的变量,使用寄存器作为指针进行寻址。进行寻址。idataidata区声明中的存储类型标识符为区声明中的存储类型标识符为idataidata,指内部,指内部的的256256字节的存储区,但是只能间接寻址,速度比直接寻址慢。字节的存储区,但是只能间接寻址,速度比直接寻址慢。声明举例如下:声明举例如下:unsigned char idata system_status=0;unsigned int idata unit_id2;char idata inp_string16;float idata out_value;第22页/共126页(4)p
16、data区和xdata区pdatapdata区和区和xdataxdata区属于外部数据存储区,外部数据区是可读可写的存储区,最多可以有区属于外部数据存储区,外部数据区是可读可写的存储区,最多可以有64KB64KB。在这两个区,变量的声明与在其他区的语法是一样的,但在这两个区,变量的声明与在其他区的语法是一样的,但pdatapdata区只有区只有256256字节而字节而xdataxdata区可达区可达65 53665 536字节。字节。第23页/共126页声明举例如下:声明举例如下:unsigned char xdata system_status=0;unsigned int pdata un
17、it_id2;char xdata inp_string16;float pdata out_value;外部地址段中除了包含存储器地址外,还包含外部地址段中除了包含存储器地址外,还包含I/OI/O器件的地址器件的地址。对外部器件寻址可以通过指针或对外部器件寻址可以通过指针或C51C51提供的宏,使用宏对外部器提供的宏,使用宏对外部器件件I/OI/O口进行寻址更具可读性。口进行寻址更具可读性。第24页/共126页(5 5)程序存储区)程序存储区codecode程序存储区的数据是不可改变的,跳转向量和状态表对程序存储区的数据是不可改变的,跳转向量和状态表对codecode段段访问和对访问和对xd
18、ataxdata区访问的时间是一样的。编译的时候要对程序存区访问的时间是一样的。编译的时候要对程序存储区中的对象进行初始化,否则就会产生错误。程序存储区储区中的对象进行初始化,否则就会产生错误。程序存储区codecode声明的标识符为声明的标识符为codecode,在,在C51C51语言编译器中可以用语言编译器中可以用codecode存存储区类型标识符来访问程序存储区。下面是程序存储区声明的储区类型标识符来访问程序存储区。下面是程序存储区声明的例子:例子:unsigned char code a=0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0
19、 x08,0 x09,0 x10,0 x11,0 x12,0 x13,0 x14,0 x15;第25页/共126页变量存储类型定义举例:变量存储类型定义举例:char data var1;bit bdata flags;float idata x,y,z;unsigned int pdata dimension;unsigned char xdata vector1044;第26页/共126页3.1.4 3.1.4 局部变量与全局变量局部变量与全局变量 从变量的作用范围来区分,变量可以被分为从变量的作用范围来区分,变量可以被分为全局变量和局部变量全局变量和局部变量;某些变量在程序运行过程中是始
20、终存在的某些变量在程序运行过程中是始终存在的-全局变量全局变量。某些变量只是在进入某个函数时才开始存在某些变量只是在进入某个函数时才开始存在-局部变量。局部变量。第27页/共126页1 1局部变量局部变量局部变量局部变量是在某个函数中存在的变量,也可以称为内部变量,是在某个函数中存在的变量,也可以称为内部变量,它只在该函数内部有效。它只在该函数内部有效。局部变量可以分为局部变量可以分为动态局部变量动态局部变量和和静态局部变量静态局部变量,使用关键词,使用关键词autoauto定义动态局部变量(定义动态局部变量(autoauto可以省略),使用关键词可以省略),使用关键词staticstatic
21、定义静态局部变量,例如定义静态局部变量,例如:auto int a;static unsigned char j;第28页/共126页动态局部变量动态局部变量在程序执行完毕后其存储空间被释放,而在程序执行完毕后其存储空间被释放,而静态局部变量静态局部变量在程序执行完成后其存储空间并不释在程序执行完成后其存储空间并不释放,而且其值保持不变。放,而且其值保持不变。如果该函数再次被调用,则该函数初始化后其初始值为上次的数值。如果该函数再次被调用,则该函数初始化后其初始值为上次的数值。动态局部变量和静态局部变量的区别如下:动态局部变量和静态局部变量的区别如下:第29页/共126页 动态局部变量在函数被
22、调用时分配存储空间和初始化,每次函动态局部变量在函数被调用时分配存储空间和初始化,每次函数调用时都需要初始化;静态局部变量在编译程序时分配存储数调用时都需要初始化;静态局部变量在编译程序时分配存储空间和初始化,仅初始化一次。空间和初始化,仅初始化一次。动态局部变量存放在动态存储区,在每次退出所属函数时释放;动态局部变量存放在动态存储区,在每次退出所属函数时释放;静态局部变量存放在静态存储区,每次调用后函数不释放,保静态局部变量存放在静态存储区,每次调用后函数不释放,保持函数执行完毕之后的数值到下一次调用。持函数执行完毕之后的数值到下一次调用。如果在建立时动态局部变量不初始为一个不确定的数,静态
23、局如果在建立时动态局部变量不初始为一个不确定的数,静态局部变量不初始化,则它们的值为部变量不初始化,则它们的值为0 0或者是空字符。或者是空字符。第30页/共126页2 2全局变量全局变量全局变量是在整个源文件中都存在的变量,又称为外部变量。全局变量的有效区间是从定义点开始到源文全局变量是在整个源文件中都存在的变量,又称为外部变量。全局变量的有效区间是从定义点开始到源文件结束,其中的所有函数都可以直接访问该变量,如果定义点之前的函数需要访问该变量,则需要使用件结束,其中的所有函数都可以直接访问该变量,如果定义点之前的函数需要访问该变量,则需要使用externextern关键词对该变量进行声明,
24、如果全局变量声明文件之外的源文件需要访问该变量,也需要使用关键词对该变量进行声明,如果全局变量声明文件之外的源文件需要访问该变量,也需要使用externextern关键词进行声明。关键词进行声明。第31页/共126页全局变量有以下特点:全局变量有以下特点:全局变量是整个文件都可以访问的变量,可以用于在函数之间全局变量是整个文件都可以访问的变量,可以用于在函数之间共享大量的数据,存在周期长,在程序编译时就存在,如果两共享大量的数据,存在周期长,在程序编译时就存在,如果两个函数需要在不互相调用时共享数据,则可以使用全局变量进个函数需要在不互相调用时共享数据,则可以使用全局变量进行参数传递;行参数传
25、递;C51C51语言程序的函数只支持一个函数返回值,如果一个函数需语言程序的函数只支持一个函数返回值,如果一个函数需要返回多个值,除了使用指针外,还要使用全局变量;要返回多个值,除了使用指针外,还要使用全局变量;第32页/共126页 使用全局变量进行参数传递可以减少从实际参数向形式参数传使用全局变量进行参数传递可以减少从实际参数向形式参数传递时所必需的堆栈操作;递时所必需的堆栈操作;在一个文件中,如果某个函数的局部变量和全局变量同名,则在一个文件中,如果某个函数的局部变量和全局变量同名,则在这个局部变量的作用范围内局部变量不起作用,全局变量起在这个局部变量的作用范围内局部变量不起作用,全局变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 语言程序设计 基础
限制150内