
第五章C51基本语法.ppt
36页5.1 C51数据数据类类型型C51基本数据类型包括标准C语言支持的基本数类型和C51扩展的数据类型两部分其中标准C语言支持的数据类型有: unsigned charchar、unsigned int、int、 unsigned long、long、float和指针类型 ;•扩展的C51基本类型有 bit、 sbit、 sfr、 sfr16 此外,C51也支持数组、结构体、联合体、枚举等构造数据类型表9-1是C51支持的基本数据类型1编辑ppt表9-1 C51的数据类型数据类型值域范围Bit1 bit0,1Sbit1 bit0,1unsigned char1 byte0~255 Char1 byte-128~127Sfr1 byte0~255unsigned int2 byte0~65536Int2 byte-32768~32767Sfr162 byte0~65536unsigned long 4 byte0~4294967295Long4 byte2147483648~2147483647Float4 byte+1.175494E-38~+3.402823E+382编辑ppt5.1.1 常量常量•在程序运行中其值不能改变的量称为常量。
在C51中常量一般存储在程序存储器ROM中 •整型常量整型常量•浮点型常量浮点型常量•字符型常量和字符串型常量字符型常量和字符串型常量3编辑ppt5.1.2 变变量量存储器类型对应区域 说明Data内部RAM(00H-7FH)直接访问内部RAM,速度最快Bdata内部RAM(20H-2FH)允许位与字节混合访问Idata内部RAM(00H-FFH)采用@R0,@R1间接访问Pdata外部RAM某页(256字节)用MOVX @Ri指令访问Xdata外部RAM(0000H-FFFFH) 用MOVX @DPTR指令访问Code程序存储器(64KB)用MOVC @A+DPTR指令访问4编辑ppt5.2.一般一般变变量的定量的定义义•[存储种类] 数据类型 [存储器类型] 变量名(或变量名列表);•定义格式中方括号部分[ ]是可选项,可有可无•存储种类有:动态(auto)、外部(extern)、静态(static)和寄存器(register)若该项缺省,则默认为auto•定义变量时如果省略存储器类型,默认存储器类型去指定变量的存储区域(见表9-3)5编辑ppt存储模式说 明SMALL 函数参数及局部变量放在片内RAM(默认变量类型为data,最大128字节)。
另外所有对象包括栈都优先放置于片内RAM,当片内RAM用满,再向片外RAM放置COMPACT参数及局部变量放在片外RAM(默认的存储类型是pdata,最大256字节);通过R0、R1间接寻址,栈位于8051片内RAMLARGE参数及局部变量直接放入片外RAM(默认的存储类型是xdata,最大64KB);使用数据指针DPTR间接寻址因此访问效率较低且直接影响代码长度6编辑ppt•例如:•unsigned int data Count;•intidatai;•charxdataj;•floatk; 7编辑ppt 5.3.C51扩扩展数据展数据类类型型对应变对应变量定量定义义•(1)普通位普通位变变量量bit bit [存储器类型] 变量名; bit bdata bVoltHighFlag;•(2)特殊功能寄存器特殊功能寄存器sfr sfr 特殊功能寄存器名= 特殊功能寄存器地址常数 sfr P1 = 0x90; //定义P1口,地址90H sfr P2 = 0xA0; //定义P1口,地址A0H 对定时器T1的定义如下: sfr16 T2= 0XCC; 8编辑ppt•(3)特殊位特殊位变变量量sbit•特殊位变量的类型符为sbit,有三种定义 ①sbit 位变量名=位地址 sbit P1_1 = Ox91;•②sbit 位变量名=变量名位置 sfr P3 = 0xB0; sbit P3_1 = P3 ^ 1;•③sbit 位变量名=字节地址^位位置 sbit P3_1 = 0xB0 ^ 1; sbit flag=0X20^7 ;9编辑ppt5.4.C51绝对绝对地地变变量的量的访问访问•((1))绝对绝对宏宏#include
11编辑ppt5.5 运算符与表达式运算符与表达式•C51的运算符有以下几类: 算术运算符、逻辑运算符、位操作运算符、 赋值运算符,条件运算符、逗号运算符 .•由运算符根据C51规则将不同对象连接起来就构成了C51的表达式,•在表达式后加上分号就构成了C51语句12编辑ppt5.5.1赋值赋值运算运算•变量 = 表达式;•例如: int a,b,c,d,e,f;a = 0x10 //将常数十六进制数10赋于变量a b = c = 2; //同时将2赋值给变量b,cd = e; //将变量e的值赋于变量df = d-e; //将变量d-e的值赋于变量f13编辑ppt5.5.2算算术术运算运算•1.算.算术术运算符及算运算符及算术术表达式表达式 十 (加法运算符,或正值符号) - (减法运算符,或负值符号) * (乘法运算符)/ (除法运算将) % (模(求余)运算符例如5%3结果是5除以3所得的余数2) 14编辑ppt•2.算.算术术运算的运算的优优先先级级与与结结合性合性•先乘除模,后加减,括号最优先 a+b*c;// 先运算b*c,所得的结果再与a相加 (a+b)*(c-d)-6;// 先(a+b)和(c-d),然后相乘,最后减6•当运算符的两侧的数据类型不同时必须通过数据类型转换将数据转换成同种类型。
•自动类型转换和强制类型转换 (double)xx // 将xx强制转换成double类型 (int)(a+b) // 将a+b的值强制转换成int类型15编辑ppt5.5.3关系运算关系运算1.关系运算符.关系运算符 < (小于) > (大于) <= (小于或等于) >= (大于或等于) == (等于) != (不等于) 16编辑ppt•2.关系表达式.关系表达式•表达式1 关系运算符 表达式2 a>b; //若a大于b,则表达式值为1b+c<a//若a=3,b=4,c=5, 则表达式值为0(a>b)==c; //若a=3,b=2,c=1, 则表达式值为1c==5>a>b;//若a=3,b=2,c=1, 则表达式值为017编辑ppt5.5.4逻辑逻辑运算运算逻辑逻辑与:条件式与:条件式1 && 条件式条件式2逻辑逻辑或:条件式或:条件式1 | | 条件式条件式2逻辑逻辑非:非: ! 条件式条件式•9.5.5位运算位运算& 按位与、按位与、| 按位或、按位或、^ 按位异或、按位异或、~ 按位按位取反取反<< 位左移、位左移、>> 位右移位右移•位运算符不能位运算符不能对对浮点型数据浮点型数据进进行操作。
行操作 18编辑ppt•1.自增减运算.自增减运算 ++i;--i;i++;i--; •2.复合.复合赋值赋值运算运算 += 、-=;*=、/= 、%=、>>=、<<=、 &=、|=、、^=、 ~= •例如 a+=3等价于a=a+3 b/=a+5 等价于 b=b/(a+5)5.5.6自增减运算及复合运算自增减运算及复合运算19编辑ppt5.5.7逗号表达式7逗号表达式• 表达式1,表达式2,表达式3……表达式n•是从左到右计算出各个表达式的值,而整个用逗号运算符组成的表达式的值等于最右边表达式的值,就是“表达式n”的值20编辑ppt5.6 C51程序程序结结构构•5.6.1 分支分支结结构构1、、if语语句句2、条件表达式、条件表达式逻辑表达式?表达式1:表达式2例如: max=(x>y) ? x :y;3、、switch语语句句21编辑ppt•5.6.2 循循环结环结构构•1..while(表达式表达式) 语语句句 •2..for(表达式表达式1;表达式;表达式2;表达式;表达式3) 语语句句 •5..break•6..continue22编辑ppt5.7 数数组组、、结结构体、构体、联联合体合体•5.7.1 数数组组•1、一、一维维数数组组•((1)定)定义义•数据类型 [存储器类型] 变量名[下标];•例如,在外部存储区定义一个数组保存8位A/D芯片采样的16个数据•unsigned char xdata AdSample[20];23编辑ppt•((2)引用)引用 数组名[下标];a[0]=a[5]+a[7]-a[2*3];•((3初始化初始化int a[10]={0,1,2,3,4,5,6,7,8,9};24编辑ppt•2、二、二维维数数组组((1)定)定义义类型符 [存储器类型] 数组名[常量表达式][常量表达式];例如:float xdata a[3][4],b[5][10];(2)引用引用•数组名[行下标表达式][列下标表达式]; a[1][2]= a[2][0]; (3)二二维维数数组组的初始化的初始化int a[3][4]={{0,1,2,3},{1,2,3,4},{2,3,4,5}};int a[3][4]={0,1,2,3,1,2,3,4,2,3,4,5};25编辑ppt•3、字符数、字符数组组 •char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};// 对全体元素•char c[]="C program"; •4、多、多维维数数组组•多维数组的一般说明格式是: • 数据类型 数组名[第n维长度][第n-1维长度]......[第1维长度];char c[2][2][3]; 26编辑ppt•5.7.2 结结构体构体•1.定.定义义•struct 结构体名 { 成员表列;};•struct stu{• int num ;// 整型变量;• char name[20] ;// 字符数组• float score;//实型变量•}; //该分号是不可少的。
•定义结构变量的一般格式为: struct 结构体名 [存储类型] 变量名;•struct stu xdata student1,student2;27编辑ppt•结构体定义还可以用类型定义符来定义 typedef struct {成员表列;}结构体名;•这时,结构体变量的定义为: 结构体名 变量名; 例如: typedef struct { int num;char name[20];float score; } stu; stu student1;//定义stu型变量student128编辑ppt•2.引用.引用 结构体变量名.成员名: student1. score=99.5; student1. num=10;•3..结结构体构体变变量的初始化量的初始化 struct stu student1={21,”LiMing”,78.5};•4..结结构体数构体数组组 struct 结构体名 数组名[数组长度]; struct stu Stu421[30];•对结构体数组的引用方式如下: 数组名[下标].成员名; Stu421[1]. score=99.5;29编辑ppt•5.位.位结结构构• struct位结构名•{ 数据类型 变量名: 整型常数;• 数据类型 变量名: 整型常数;• } 位结构变量; •数据类型必须是int(unsigne)或char(unsigned char)。
30编辑ppt•struct ColStru { •unsigned incon: 8; /*incon占用低字节的0~7*/ •unsigned txcolor: 4;/*txcolor占用高字节的0~3*/ •unsigned bgcolor: 3;/*bgcolor占用高字节的4~6*/ •unsigned blink: 1; /*blink占用高字节的第7位*/ • } •位结构成员的访问与结构成员的访问相同struct ColStru bdata ch; ch.bgcolor=3; ch. blink =1;31编辑ppt•5.7.3 联联合体合体•union 联合名{ 成员列表}; union a_bc{ int i;char mm; } union a_bc xy[10];xy[3]. mm=’A’; 32编辑ppt•5.8.1 指指针针的定的定义义与引与引•类型标识符 [存储器类型] *标识符;•一般指针在内存中占用三个字节,第一个字节存放该指针存储器类型的编码,第二和第三字节分别存放该指针的高位和低位地址偏移量•如果指针变量被定义为基于某种存储模式的指针,则该指针称为具体指针,其长度可以是1个字节(存储器模式为data、idata、pdata)或两个字节(存储模式为code、xdata)。
5.8 指指针针33编辑ppt•指针变量在定义中允许带初始化项如:•int data i, j, *p1, *p2; •int data *ip=&i;//定义的具体指针•int *ip=&i; //定义的一般指针 •j =*ip;•p1=&i;// p1指向i• p2=&j;// p2指向j •p2=p1;//此时P2也指向i34编辑ppt•1、指、指针针与一与一维维数数组组• int a[10], *p; p=&a[0];•下面两个语句是等价的•p=&a[0];p=a;•(1) p+i和a+i均表示a[i]的地址, 或者讲, 它们均指向数组第i号元素, 即指向a[i]•(2)*(p+i)和*(a+i)都表示p+i和a+i所指对象的内容, 即为a[i]•(3)指向数组元素的指针, 也可以表示成数组的形式, 也就是说, 它允许指针变量带下标, 如p[i]与*(p+i)等价5.8.2指指针针和数和数组组35编辑ppt5.8.3指指针针和机构体、和机构体、联联合体合体•stu student1;//定义stu型变量student1• stu *P;• p-> num=20;• p-> score=99.5;36编辑ppt。












