




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
6、char si; unsigned char si; 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
7、 535 65 535 0 x12340 x1234存储形式存储形式第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; /指定指
8、定x,yx,y为单精度实数为单精度实数 double z; / double z; /指定指定z z为双精度实数为双精度实数 在一般系统中,一个在一般系统中,一个floatfloat型数据在内存中占型数据在内存中占4 4个字节(个字节(3232位),一个位),一个doubledouble型数据占型数据占8 8个字节(个字节(6464位)。单精度实数提位)。单精度实数提供供7 7位有效数字,双精度实数提供位有效数字,双精度实数提供15151616位有效数字。位有效数字。第13页/共126页(5 5)字符变量)字符变量charchar 字符变量用来存放字符常量。注意只能存放字符变量用来存放字符常量
9、。注意只能存放1 1个字符。个字符。 字符变量的定义形式如下:字符变量的定义形式如下: char 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位数据
10、位数据。第14页/共126页(6 6)位变量()位变量(bitbit) 变量的类型是位,位变量的值可以是变量的类型是位,位变量的值可以是1 1(truetrue)或)或0 0(falsefalse)。)。 与与80518051硬件特性操作有关的位变量必须定位在硬件特性操作有关的位变量必须定位在80518051单片机片内存储区(单片机片内存储区(RAMRAM)的可位寻址空间中。)的可位寻址空间中。第15页/共126页3 3有符号有符号/ /无符号问题说明无符号问题说明 (1 1)尽量使用无符号变量)尽量使用无符号变量 (2 2)在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型:
11、)在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型: #define uchar unsigned char#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 另外:另外:bda
12、tabdata第17页/共126页第18页/共126页(1 1)datadata区区 datadata区的寻址是最快的,所以应该把经常使区的寻址是最快的,所以应该把经常使用的变量放在用的变量放在datadata区,但是区,但是datadata区的空间区的空间是有限的,是有限的,datadata区除了包含程序变量外,还区除了包含程序变量外,还包含了堆栈和寄存器组。包含了堆栈和寄存器组。 datadata区声明中的存储类型标式符为区声明中的存储类型标式符为datadata,通常指片内通常指片内RAMRAM的低的低128128字节的内部数据存字节的内部数据存储的变量,可直接寻址。储的变量,可直接寻址
13、。 声明举例如下:声明举例如下: unsigned char data system_status=0; unsigned int data unit_id2; char data inp_string16;第19页/共126页(2)bdata bdatabdata实际是实际是datadata中的位寻址区,在这个区中的位寻址区,在这个区中声明变量就可以进行位寻址。位变量的声中声明变量就可以进行位寻址。位变量的声明对状态寄存器来说是十分有用的,因为它明对状态寄存器来说是十分有用的,因为它可能仅仅需要某一位,而不是整个字节。可能仅仅需要某一位,而不是整个字节。 bdatabdata区声明中的存储类
14、型标识符为区声明中的存储类型标识符为bdatabdata,指内部可位寻址的指内部可位寻址的1616字节存储区(字节存储区(20H20H到到2FH2FH),数据类型是可位寻址变量的数据类),数据类型是可位寻址变量的数据类型。型。 以下是在以下是在bdatabdata区中声明的位变量和使用位区中声明的位变量和使用位变量的例子:变量的例子: 第20页/共126页 unsigned char bdata status_byte; unsigned int bdata status_word; unsigned long bdata status_dword; sbit stat_flag=status
15、_byte4; if(status_word15) stat_flag=1;第21页/共126页(3)idata区 idataidata区也可以存放使用比较频繁的变量,使用寄存器作为指针区也可以存放使用比较频繁的变量,使用寄存器作为指针进行寻址。进行寻址。idataidata区声明中的存储类型标识符为区声明中的存储类型标识符为idataidata,指内部,指内部的的256256字节的存储区,但是只能间接寻址,速度比直接寻址慢。字节的存储区,但是只能间接寻址,速度比直接寻址慢。 声明举例如下:声明举例如下: unsigned char idata system_status=0; unsigne
16、d int idata unit_id2; char idata inp_string16; float idata out_value;第22页/共126页(4)pdata区和xdata区 pdatapdata区和区和xdataxdata区属于外部数据存储区,外部数据区是可读可写的存储区,最多可以有区属于外部数据存储区,外部数据区是可读可写的存储区,最多可以有64KB64KB。 在这两个区,变量的声明与在其他区的语法是一样的,但在这两个区,变量的声明与在其他区的语法是一样的,但pdatapdata区只有区只有256256字节而字节而xdataxdata区可达区可达65 53665 536字节
17、。字节。第23页/共126页声明举例如下:声明举例如下: unsigned char xdata system_status=0; unsigned int pdata unit_id2 ; char xdata inp_string16 ; float pdata out_value; 外部地址段中除了包含存储器地址外,还包含外部地址段中除了包含存储器地址外,还包含I/OI/O器件的地址器件的地址。对外部器件寻址可以通过指针或对外部器件寻址可以通过指针或C51C51提供的宏,使用宏对外部器提供的宏,使用宏对外部器件件I/OI/O口进行寻址更具可读性。口进行寻址更具可读性。第24页/共126页
18、(5 5)程序存储区)程序存储区codecode 程序存储区的数据是不可改变的,跳转向量和状态表对程序存储区的数据是不可改变的,跳转向量和状态表对codecode段段访问和对访问和对xdataxdata区访问的时间是一样的。编译的时候要对程序存区访问的时间是一样的。编译的时候要对程序存储区中的对象进行初始化,否则就会产生错误。程序存储区储区中的对象进行初始化,否则就会产生错误。程序存储区codecode声明的标识符为声明的标识符为codecode,在,在C51C51语言编译器中可以用语言编译器中可以用codecode存存储区类型标识符来访问程序存储区。下面是程序存储区声明的储区类型标识符来访问
19、程序存储区。下面是程序存储区声明的例子:例子: unsigned char code a = 0 x00,0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 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
20、.1.4 3.1.4 局部变量与全局变量局部变量与全局变量 从变量的作用范围来区分,变量可以被分为从变量的作用范围来区分,变量可以被分为全局变量和局部变量全局变量和局部变量; 某些变量在程序运行过程中是始终存在的某些变量在程序运行过程中是始终存在的-全局变量全局变量。 某些变量只是在进入某个函数时才开始存在某些变量只是在进入某个函数时才开始存在-局部变量。局部变量。第27页/共126页1 1局部变量局部变量 局部变量局部变量是在某个函数中存在的变量,也可以称为内部变量,是在某个函数中存在的变量,也可以称为内部变量,它只在该函数内部有效。它只在该函数内部有效。 局部变量可以分为局部变量可以分为动
21、态局部变量动态局部变量和和静态局部变量静态局部变量,使用关键词,使用关键词autoauto定义动态局部变量(定义动态局部变量(autoauto可以省略),使用关键词可以省略),使用关键词staticstatic定义静态局部变量,例如定义静态局部变量,例如: auto int a; static unsigned char j;第28页/共126页 动态局部变量动态局部变量在程序执行完毕后其存储空间被释放,而在程序执行完毕后其存储空间被释放,而静态局部变量静态局部变量在程序执行完成后其存储空间并不释在程序执行完成后其存储空间并不释放,而且其值保持不变。放,而且其值保持不变。 如果该函数再次被调用
22、,则该函数初始化后其初始值为上次的数值。如果该函数再次被调用,则该函数初始化后其初始值为上次的数值。 动态局部变量和静态局部变量的区别如下:动态局部变量和静态局部变量的区别如下:第29页/共126页 动态局部变量在函数被调用时分配存储空间和初始化,每次动态局部变量在函数被调用时分配存储空间和初始化,每次函数调用时都需要初始化;静态局部变量在编译程序时分配存函数调用时都需要初始化;静态局部变量在编译程序时分配存储空间和初始化,仅初始化一次。储空间和初始化,仅初始化一次。 动态局部变量存放在动态存储区,在每次退出所属函数时释动态局部变量存放在动态存储区,在每次退出所属函数时释放;静态局部变量存放在
23、静态存储区,每次调用后函数不释放,放;静态局部变量存放在静态存储区,每次调用后函数不释放,保持函数执行完毕之后的数值到下一次调用。保持函数执行完毕之后的数值到下一次调用。 如果在建立时动态局部变量不初始为一个不确定的数,静态如果在建立时动态局部变量不初始为一个不确定的数,静态局部变量不初始化,则它们的值为局部变量不初始化,则它们的值为0 0或者是空字符。或者是空字符。第30页/共126页2 2全局变量全局变量 全局变量是在整个源文件中都存在的变量,又称为外部变量。全局变量的有效区间是从定义点开始到源文全局变量是在整个源文件中都存在的变量,又称为外部变量。全局变量的有效区间是从定义点开始到源文件
24、结束,其中的所有函数都可以直接访问该变量,如果定义点之前的函数需要访问该变量,则需要使用件结束,其中的所有函数都可以直接访问该变量,如果定义点之前的函数需要访问该变量,则需要使用externextern关键词对该变量进行声明,如果全局变量声明文件之外的源文件需要访问该变量,也需要使用关键词对该变量进行声明,如果全局变量声明文件之外的源文件需要访问该变量,也需要使用externextern关键词进行声明。关键词进行声明。第31页/共126页全局变量有以下特点:全局变量有以下特点: 全局变量是整个文件都可以访问的变量,可以用于在函数之全局变量是整个文件都可以访问的变量,可以用于在函数之间共享大量的
25、数据,存在周期长,在程序编译时就存在,如果间共享大量的数据,存在周期长,在程序编译时就存在,如果两个函数需要在不互相调用时共享数据,则可以使用全局变量两个函数需要在不互相调用时共享数据,则可以使用全局变量进行参数传递;进行参数传递; C51C51语言程序的函数只支持一个函数返回值,如果一个函数需语言程序的函数只支持一个函数返回值,如果一个函数需要返回多个值,除了使用指针外,还要使用全局变量;要返回多个值,除了使用指针外,还要使用全局变量;第32页/共126页 使用全局变量进行参数传递可以减少从实际参数向形式参数使用全局变量进行参数传递可以减少从实际参数向形式参数传递时所必需的堆栈操作;传递时所
26、必需的堆栈操作; 在一个文件中,如果某个函数的局部变量和全局变量同名,在一个文件中,如果某个函数的局部变量和全局变量同名,则在这个局部变量的作用范围内局部变量不起作用,全局变量则在这个局部变量的作用范围内局部变量不起作用,全局变量起作用;起作用; 全局变量一直存在,占用了大量的内存单元,并且加大了程全局变量一直存在,占用了大量的内存单元,并且加大了程序的耦合性,不利于程序的移植或复用。序的耦合性,不利于程序的移植或复用。第33页/共126页 静态局部变量的作用范围仅仅是在定义的函数内,不能被其静态局部变量的作用范围仅仅是在定义的函数内,不能被其他的函数访问,全局变量的作用范围是整个程序,静态全
27、局变他的函数访问,全局变量的作用范围是整个程序,静态全局变量的作用范围是该变量定义的文件;量的作用范围是该变量定义的文件; 静态局部变量是在函数内部定义,全局变量是在所有函数外静态局部变量是在函数内部定义,全局变量是在所有函数外定义;定义; 静态局部变量仅仅在第静态局部变量仅仅在第1 1次调用时被初始化,再次调用时使用次调用时被初始化,再次调用时使用上次调用结束时的数值,全局变量在程序运行时建立,值为最上次调用结束时的数值,全局变量在程序运行时建立,值为最近一条访问该全局变量的语句执行的结果。近一条访问该全局变量的语句执行的结果。第34页/共126页 另外,另外,mainmain函数虽然是函数
28、虽然是.c.c文件的主文件,但也是一个函数,在其内部定义的变量也属于局部变量。全局变文件的主文件,但也是一个函数,在其内部定义的变量也属于局部变量。全局变量一般在量一般在.c.c文件的开始部分定义或在文件的开始部分定义或在.h.h文件中定义,由文件中定义,由.c.c文件引用。文件引用。C51C51语言程序多使用全局变量传递参语言程序多使用全局变量传递参数,因为这样可以降低程序处理的难度,加快程序执行的速度,提高程序的时效性。数,因为这样可以降低程序处理的难度,加快程序执行的速度,提高程序的时效性。第35页/共126页3.2 C513.2 C51对单片机资源的控制对单片机资源的控制3.2.1 3
29、.2.1 特殊功能寄存器的特殊功能寄存器的C51C51语言定义语言定义3.2.2 3.2.2 绝对地址的访问绝对地址的访问3.2.3 3.2.3 位变量的位变量的C51C51语言定义语言定义第36页/共126页3.2.1 3.2.1 特殊功能寄存器的特殊功能寄存器的C51C51定义定义 2121个特殊功能寄存器。两种方式:个特殊功能寄存器。两种方式: 1 1使用关键字使用关键字sfrsfr定义定义 sfr sfr 特功器名字特功器名字= =特功器地址特功器地址; ; sfrsfr SCON=0 x98; SCON=0 x98; / /* *串口控制寄存器地址串口控制寄存器地址98H98H* *
30、/ / sfrsfr TMOD=0X89; TMOD=0X89; / /* *定时器定时器/ /计数器方式控制寄存器地址计数器方式控制寄存器地址89H89H* */ /第37页/共126页2 2通过头文件访问通过头文件访问SFRSFR #include #include /使用的单片机为使用的单片机为IntelIntel公司的公司的MCS-51MCS-51 void main(void)void main(void) TL0=0 xb0; TL0=0 xb0; TH0=0 x3c;TH0=0 x3c;TR0=1; TR0=1; /启动定时器启动定时器0 0. 第38页/共126页3 3SFRS
31、FR中位定义中位定义3 3种方式种方式 (1 1)第)第1 1种方法种方法 sbit sbit 位名位名= =特殊功能寄存器名特殊功能寄存器名 位置位置; ; (2 2)第)第2 2种方法种方法 sbit sbit 位名位名= =字节地址字节地址 位置位置; ; (3 3)第)第3 3种方法种方法 sbit sbit 位名位名= =位地址位地址; ;第39页/共126页例:例: sfr PSW=0 xD0; sbit OV=PSW2; sbit OV=0 xD02; sbit OV=0 xD2;第40页/共126页 unsigned char bdata flag; sbit flag0=fl
32、ag0; sfr P1=0 x90; sbit P1_0=P10; sbit P1_1=P11; sbit P1_6=P16; sbit P1_7=P17;第41页/共126页P60 P60 例例3-33-3 sbit sbit型变量的定义型变量的定义P60 P60 例例3-43-4 片内片内I/OI/O口及其位的定义口及其位的定义第42页/共126页3.2.2 3.2.2 绝对地址的访问绝对地址的访问 包括:包括: 片内片内RAMRAM、片外、片外RAMRAM及及I/OI/O口口 可以有两种方式:可以有两种方式: 1 1、通过宏定义、通过宏定义 2 2、_at_at_第43页/共126页1
33、1、通过宏定义、通过宏定义 用用#include#include可使用其中声明的宏来访问绝对地址,可使用其中声明的宏来访问绝对地址, DBYTEDBYTE以字节形式对以字节形式对datadata区寻址;区寻址; DWORDDWORD以字形式对以字形式对datadata区寻址;区寻址; XBYTEXBYTE以字节形式对以字节形式对xdataxdata区寻址;区寻址; XWORDXWORD以字形式对以字形式对xdataxdata区寻址;区寻址;第44页/共126页另外:另外: CBYTE CBYTE以字节形式对以字节形式对codecode区寻址;区寻址; CWORDCWORD以字形式对以字形式对c
34、odecode区寻址;区寻址; PBYTEPBYTE以字节形式对以字节形式对pdatapdata区寻址;区寻址; PWORDPWORD以字形式对以字形式对pdatapdata区寻址。区寻址。第45页/共126页如:如: #include#include #define PORTA#define PORTA XBYTE XBYTE0 xFFC00 xFFC0 / /* *将将PORTPORT定义为外部定义为外部I/OI/O口,地址为口,地址为0 xFFC00 xFFC0,长度为,长度为8 8位位* */ / #define NRAM #define NRAM DBYTEDBYTE0 x400 x
35、40 / /* *将将NRAMNRAM定义为片内定义为片内RAMRAM,地址为,地址为40H40H,长度为,长度为8 8位位* */ /第46页/共126页例例3-5( P61 )3-5( P61 ) #include #include #define PA XBYTE0 xffec#define PA XBYTE0 xffec/将将PAPA定义为外部定义为外部I/OI/O口,地址为口,地址为0 xffec0 xffec #define NRAM DBYTE0 x40#define NRAM DBYTE0 x40/ /* *将将NRAMNRAM定义为片内定义为片内RAMRAM,地址为,地址为4
36、0H40H,长度为,长度为8 8位位* */ / void main( ) void main( ) PA=0 x3A;PA=0 x3A; NRAM=0 x01;NRAM=0 x01; 第47页/共126页2 2、_at_at_关键词关键词 可以使用关键字可以使用关键字_at_at_对指定的存储器空间的绝对地址进行访问。对指定的存储器空间的绝对地址进行访问。 一般格式如下:一般格式如下: 【存储类型存储类型】 数据类型符数据类型符 变量名变量名 _at_ _at_ 地址常数地址常数; ;第48页/共126页例例3-63-6(P62)P62) data unsigned char x1 _at_
37、 0 x40;/*在data区定义字节变量x1,它的地址为40H*/ xdata unsigned int x2 _at_ 0 x2000;/*在xdata区定义字变量x2,它的地址为2000H*/ void main(void) x1=0 xff; x2=0 x1234H;.while(1); 第49页/共126页3.2.3 3.2.3 位变量的位变量的C51C51语言定义语言定义 1 1位变量的位变量的C51C51语言定义语言定义 采用关键字采用关键字bitbit进行定义。例如:进行定义。例如: bit direction_bit; bit direction_bit; / /* * 将将
38、direction_bitdirection_bit定义为位变量定义为位变量 * */ / bit lock_pointer; bit lock_pointer; / /* * 将将lock_pointerlock_pointer定义为位变量定义为位变量 * */ / bit display_invers; bit display_invers; / /* * 将将display_inversdisplay_invers定义为位变量定义为位变量 * */ /第50页/共126页2 2可位寻址对象可位寻址对象 可位寻址对象指可以字节或位寻址的对象。该对象应位于可位寻址对象指可以字节或位寻址的对象
39、。该对象应位于80518051片内可位寻址片内可位寻址RAMRAM区中,区中,C51C51语言编译器允许数据类型为语言编译器允许数据类型为idataidata的对象放入的对象放入80518051片内可位寻址片内可位寻址RAMRAM区。区。 位变量的存储类型只能是位变量的存储类型只能是bdatabdata。 在程序设计时,对于可位寻址的对象,即可以字节寻址也在程序设计时,对于可位寻址的对象,即可以字节寻址也可以位寻址的变量,但其存储类型只能是可以位寻址的变量,但其存储类型只能是bdatabdata。 使用时应先说明字节变量的数据类型和存储类型,然后可使用时应先说明字节变量的数据类型和存储类型,然
40、后可使用使用bitbit定义可独立寻址访问的对象位。定义可独立寻址访问的对象位。第51页/共126页例如:例如: bdata int ibase; / /* * ibase ibase定义为定义为bdatabdata整型变量整型变量 * */ / bdata char bary4; / /* * bary bary定义为定义为bdatabdata字符型数组字符型数组 * */ / sbit mybit0=ibase0; / /* * mybit0 mybit0定义为定义为ibaseibase的第的第0 0位位* */ / sbit mybit15=ibase15; / /* * mybit15
41、 mybit15定义位定义位ibaseibase的第的第1515位位* */ / sbit Ary07=bary07; / /* * Ary07 Ary07定义为定义为bary0bary0的第的第7 7位位* */ / sbit Ary37=bary37; / /* *Ary37Ary37定义为定义为bary3bary3的第的第7 7位位* */ /第52页/共126页 Ary37=0;Ary37=0; / /* * bary3 bary3的第的第7 7位赋值为位赋值为0 0 * */ / bary3=a;bary3=a; / /* * 字节寻址:字节寻址:bary3bary3赋值为赋值为a
42、a * */ / sbit sbit定义要求基址对象的存储类型为定义要求基址对象的存储类型为bdatabdata,只有这样其特殊位定义(,只有这样其特殊位定义(sbitsbit)是合法的。)是合法的。 位置(位置(操作符)后的最大值依赖于指定的基类型,对于操作符)后的最大值依赖于指定的基类型,对于char/ucharchar/uchar而言是而言是0 07 7,对于,对于int/uintint/uint而言是而言是0 01515,对于,对于long/ulonglong/ulong而言是而言是0 03131。第53页/共126页3.3 C513.3 C51的基本运算与流程控制的基本运算与流程控制
43、 3.3.1 3.3.1 基本运算基本运算 3.3.2 3.3.2 选择(分支)控制语句选择(分支)控制语句 3.3.3 3.3.3 循环结构流程控制语句循环结构流程控制语句 3.3.4 break3.3.4 break语句、语句、continuecontinue语句、语句、 goto goto语句语句第54页/共126页3.3.1 3.3.1 基本运算基本运算(运算符)运算符)运算符运算符是表示特定的算术或逻辑运算的符号,也称是表示特定的算术或逻辑运算的符号,也称操作符操作符。 把需要进行运算的各个量通过运算符连接起来,便构成把需要进行运算的各个量通过运算符连接起来,便构成表达式表达式。 算
44、术运算符、关系运算符、算术运算符、关系运算符、 逻辑运算符、位运算符、逻辑运算符、位运算符、 赋值运算符、特殊运算符赋值运算符、特殊运算符第55页/共126页一、算术运算一、算术运算 算术运算的操作符:算术运算的操作符: + + (加法运算符)、(加法运算符)、- - (减法运算符)(减法运算符) * * (乘法运算符)、(乘法运算符)、/ / (除法运算符)(除法运算符) (模运算或取余运算符)(模运算或取余运算符) +为自增运算符为自增运算符 - - -为自减运算符。为自减运算符。第56页/共126页注意:注意: / /:结果的整数部分结果的整数部分 % %:结果的余数部分结果的余数部分
45、- -:除进行减法外,还可以进行取负操作。:除进行减法外,还可以进行取负操作。 +:自增。表示操作数加:自增。表示操作数加1 1。 X+ X+ 等同于等同于X=X+1X=X+1。 +X +X 表示先加表示先加1 1,再取值,再取值 X+ X+表示先取值,再加表示先取值,再加1 1。第57页/共126页例例3-83-8:自增和自减运算符的程序:自增和自减运算符的程序 #include void main( ) int x, y, z1, z2; x=10; y=21; z1=(x+)+(x+); printf(“x=%d, z1=%dn”, x, z1); z2=(+y)+(+y); print
46、f(“y=%d, z2=%dn”, y, z2); 第58页/共126页二、关系运算二、关系运算成立成立或或不成立不成立 主要用于比较操作数的大小关系。主要用于比较操作数的大小关系。 包括:包括: (小于)、(小于)、= (大于)、(大于)、= (大于等于)、(大于等于)、 = = = (等于)、(等于)、!= = (不等于)(不等于) 看看关系是否成立关系是否成立。结果:。结果:0 0或或1 1第59页/共126页例例3-9 3-9 关系运算符运算的程序示例关系运算符运算的程序示例 #include void main( ) int a, b, c, d; a=-2.30; b=71=32;
47、 c=7!=0; d=-12=0; printf(“a=%d, b=%d, c=%d,d=%dn”, a, b, c, d); 第60页/共126页三、逻辑运算三、逻辑运算结果是结果是真真或或假假 进行逻辑运算的操作符。包括:进行逻辑运算的操作符。包括: & & (逻辑与)、(逻辑与)、| | (逻辑或)、(逻辑或)、 !(逻辑非)!(逻辑非) 看看结果是否为真结果是否为真。结果:。结果:0 0或或1 1。第61页/共126页例例3-10 3-10 逻辑运算的程序示例逻辑运算的程序示例 #include void main( ) int a, b, c, d, e ; a=!0 ; b=15&
48、22 ; c=35&0 ; d=17.3|0 ; e=17.3|2.6 ; printf(“a=%d, b=%d,c=%d, d=%d, e=%dn”, a, b, c, d, e); 第62页/共126页四、位运算四、位运算 将两个操作数按二进制数展开,然后对应位进行逻辑运算。包将两个操作数按二进制数展开,然后对应位进行逻辑运算。包括:括: & &(按位与)、(按位与)、| |(按位或)、(按位或)、(按位异或)、(按位异或)、(按位取(按位取反)、反)、(位右移)(位右移) 位运算的操作对象只能是整型和字符型数据。位运算的操作对象只能是整型和字符型数据。 这些位运算和汇编语言中的位操作指令
49、十分类似。位操作指令这些位运算和汇编语言中的位操作指令十分类似。位操作指令是单片机的重要特点,所以位运算在是单片机的重要特点,所以位运算在C51C51语言控制类程序设计中语言控制类程序设计中的应用比较普遍。的应用比较普遍。第63页/共126页例例3-11 3-11 位运算程序示例位运算程序示例 将将a a值循环右移值循环右移2 2位位 main( ) unsigned char a=0 xc3,b,c;int n=2;b=an;a=c|b; 第64页/共126页例例3-12 3-12 位运算程序示例位运算程序示例 #include void main( ) int a, b,c; a=23;
50、b=217; c=a&b; printf(“a&b=%dn”, c); c=a|b; printf(“a|b=%dn”, c); c=ab ; printf(“ab=%dn”, c); c=a ; printf(“a =%dn”, c); c=a3 ; printf(“a2 ; printf(“b2=%dn”, c); 第65页/共126页五、赋值运算五、赋值运算 变量名变量名= =表达式表达式; ; 例如:例如: a=(b=4)+(c=6);a=(b=4)+(c=6); 该表达式的值为该表达式的值为1010,变量,变量a a的值为的值为1010。第66页/共126页复合赋值运算符:复合赋值运
51、算符: 赋值符号前加上其他运算符构成复合运算符。赋值符号前加上其他运算符构成复合运算符。C51C51语言提供以下语言提供以下1010种复合运算符:种复合运算符: +=+=,-=-=,* *= =,= =,= =,= =,= =,=,= 例如:例如: a+=b;a+=b; / /等价于等价于a=(a+b)a=(a+b) x x* *=a+b; /=a+b; /等价于等价于x=(xx=(x* *(a+b)(a+b) a&=b;a&=b; / /等价于等价于a=(a&b)a=(a&b) a=4;a=4; / /等价于等价于a=(a4)a=(ay) max=x; min=y; 第71页/共126页形式
52、二:形式二: if(if(表达式表达式)语句语句1;1; else else 语句语句2;2; if(xy) max=x; else min=y;第72页/共126页形式三:形式三: if(if(表达式表达式1)1)语句语句1;1; else if(else if(表达式表达式2)2)语句语句2;2; else if(else if(表达式表达式3)3)语句语句3;3; else if(else if(表达式表达式m m)语句语句m m; else else 语句语句n n;第73页/共126页第74页/共126页如:如: if(x1000) y=1; else if(x500) y=2; e
53、lse if(x300) y=3; else if(x100) y=4; else y=5;第75页/共126页例例3-13 3-13 分支编程示例分支编程示例 #include main ( ) int x,y; scanf(%d,&x); if(x0) y=-1; else if (x=0) y=0;else y=1; printf(x=d,y=dn,x,y); 第76页/共126页例例3-14: #include void main( ) int a,b; a=200; b=321; if(a=b) a+;b+; printf(a=%d,b=%dn,a,b); 第77页/共126页例例3
54、-15: #include void main( ) int a,b; a=12;b=21; if(a=b) a+;b+; a-;b-; printf(a=%d,b=%dn,a,b); 第78页/共126页例例3-16: #include void main( ) int score; char grade; score=45; if(score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E; printf(score=%d,g
55、rade=%cn,score,grade); 第79页/共126页二、二、switchswitch语句语句 switchswitch语句是多分支选择语句一般形式如下:语句是多分支选择语句一般形式如下: switch(switch(表达式表达式) ) case case 常量表达式常量表达式1:1:语句语句1; break;1; break;case case 常量表达式常量表达式2:2:语句语句2; break;2; break;.case case 常量表达式常量表达式n n:语句语句n n; break; break;default:default:语句语句n n+1;+1; 第80页/共
56、126页例例3-173-17第81页/共126页3.3.3 3.3.3 循环结构流程控制语句循环结构流程控制语句 四种形式:四种形式: if goto if goto while while do-while do-while for for第82页/共126页一、基于一、基于ifif和和gotogoto构成的循环构成的循环 1 1、采用、采用ifif和和gotogoto可以构成可以构成“当型当型”循环循环 loop: if(表达式) 语句;goto loop; 第83页/共126页 2 2、采用、采用ifif和和gotogoto也可以构成也可以构成“直到型直到型”循环程序循环程序 loop:
57、 语句;if(表达式) goto loop; 3 3、gotogoto语句为无条件转向语句语句为无条件转向语句 goto goto 语句标号语句标号; ;第84页/共126页二、二、whilewhile while(while(表达式表达式) ) 语句语句; ; 第85页/共126页例:例: #include void main( ) int i, s; i=100; s=0; while(i0) s=s+i; i=i-1; printf(“1+2+100=%dn”,s); 第86页/共126页注意:注意:先判断,后执行;先判断,后执行;如果循环体内只有一个语句,可以不用如果循环体内只有一个语
58、句,可以不用 WhileWhile循环体循环体 后无分号;后无分号;第87页/共126页三、三、do-whiledo-while do 语句; while (表达式);第88页/共126页例:例: #include void main( ) int i, s; i=100;s=0; do s=s+i; i=i-1; while(i0); printf(“1+2+100=%dn”,s); 第89页/共126页注意:注意:先执行先执行, , 后判断;后判断;如果循环体内只有一个语句,可以不用如果循环体内只有一个语句,可以不用 循环体循环体 后无分号;后无分号;while(while(表达式)后的分
59、号不能省;表达式)后的分号不能省;第90页/共126页四、四、forfor for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3) 语句语句; ; for(y=0;y=99;y=y+3) delay(33); px=px; 第91页/共126页例:例: #include void main( ) int i, s; s=0; for(i=0;i=100;i+) s=s+i; printf(“1+2+100=%dn”,s); 第92页/共126页注意:注意: 3 3个表达式都是可选项,可以任意省略,但个表达式都是可选项,可以任意省略,但“;”不能省。不能省。 省省1 1是不
60、对循环变量赋初值;是不对循环变量赋初值; 省省2 2是不判断循环条件的真假;是不判断循环条件的真假; 省省3 3是不对循环变量操作。是不对循环变量操作。 for( ; ;)for( ; ;)表示无限循环。表示无限循环。第93页/共126页无限循环的实现:无限循环的实现: (1 1)for(; ;)for(; ;) 代码段;代码段; (2 2)while(1)while(1) 代码段;代码段; (3 3)do do 代码段;代码段; while while(1 1););第94页/共126页3.3.4 break3.3.4 break语句、语句、continuecontinue语句、语句、got
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚案中股权分割与公司资产重组同步协议
- 离婚协议书模板定制与婚姻纠纷解决服务合同
- 离婚协议彩礼退还与子女医疗费用分担协议范本
- 中考模拟生物试卷及答案
- 中小学教师职业素养提升的策略与路径
- 土地整治潜力评价体系的设计与实施研究
- 人工智能赋能大学生数字素养提升的实践研究
- 青砖建筑方案设计图
- 2025年高速公路智能交通系统与智能交通信息服务技术研究报告
- 《Unit 2 Let's make a fruit salad 》(教学设计)-2024-2025学年译林版(三起)英语四年级上册
- 加工中心课件培训
- 2025年广西梧州市辅警招聘考试题题库(含参考答案)
- 2025年公文写作基础知识竞赛试题库及答案
- 面部桃花灸培训专业知识课件
- (2025)汽车驾驶员(技师)考试题库及答案
- 应急预案试题及答案
- 人工智能在威胁情报中的应用-洞察及研究
- 2025年教科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 阳光体育大课间知识培训课件
- 2025年玉树州公安局面向社会公开招聘警务辅助人员(第二批)考试参考试题及答案解析
- 建筑工程临电监理细则
评论
0/150
提交评论