1、 C51语言是针对8051系列及其扩展系列单片机的语言,支持符合ANSI标准的c语言程序设计,同时针对8051系列单片机的一些特点进行了扩展。2.2.1 C512.2.1 C51的标识符和关键字的标识符和关键字 1 1、标识符、标识符 程序设计者为自定义的变量、函数、类型所起的名字只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线不能与关键字同名,尽量“见名知义”2.2.1 C512.2.1 C51的标识符和关键字的标识符和关键字【例2.1】指出下面哪些是非法的标识符?a f-2 f6 m+n x4b 4af as_d a.ss total main month int 关键字:ma
2、inint 非法字符:f-2m+n a.ss 开头非法:4af2.2.1 C512.2.1 C51的标识符和关键字的标识符和关键字2 2、关键字、关键字 又称保留字,是程序设计语言中规定的、有固定含义的单词符号。(32个)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileC51C51扩展的关键字扩展的关键字 _at_
3、alienbdatabitcodecompatdataidataintertuptlargepdata_priorityreentrantsbitsfrsfr16small_task_usingxdata数据类型C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型 char枚举类型 enum整 型实 型单精度型 float双精度型 double数组结构体 struct共用体 union长整型 long整型 int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作2.2.2 C512.2.2 C51的数据类型的数据类型位 型 bit短整型 short
4、2.2.3 C512.2.3 C51的数据类型的数据类型1.1.字符型(字符型(charchar)(1)字符型常量字符常量是用单引号括起来的一个字符,如a,1,A等都是字符常量。注意,字符型常量区分大小写,因此a和A是不同的字符常量。不可以显示的控制字符,可以在该字符前面加一个“”组成转义字符,也就是把“”后面的字符转变成另外的意义。转义字符转义字符(2)(2)字符型变量字符型变量字符型变量的长度为一个字节(即8位),而8051单片机每次可以处理8位数据,因此字符型变量非常适合于8051单片机。字符型变量分为无符号和有符号两种。如果没有显式地指明是无符号还是有符号,则默认为有符号字符型变量。(
5、2)(2)字符型变量字符型变量对字符型变量赋值有两种方法:既可以将用单引号括起来的一个字符赋给字符型变量,也可以将一个在其取值范围内的正整数赋给字符型变量。对于有符号的变量,最具有重要意义的是其最高位((8位中最左一位)。在此位上,1代表“负”,0代表“正”,剩余的低7位代表变量的绝对值,因此有符号字符型变量所能表示的数值范围是从-128十127。而无符号的变量的最高位不作为符号位,这与人们的习惯比较一致,不易出错。(3)(3)字符串常量字符串常量字符串常量是用一对双引号括起来的字符序列不要把字符常量与字符串常量混淆。这是因为在C51中,系统在每一个字符串的结尾加一个被称为“字符串结束标志”字
6、符0以判断字符串是否结束。因此“A”表示一个字符串,它包含了A和0两个字节,因此,无法存储到只有一个字节的存储空间的字符型变量中。同样地,China占用了6个字节而不是5个字节。注意:0是系统自动加上的,在写字符串时不必加0。2.2.整型(整型(intint)(1)整型常量整型常量按进制有以下3种表示形式:1)十进制整数:如134、5、-5、0等。2)八进制整数:以0开头的数,例如034表示八进制数(34)8,等于十进数28。3)十六进制数:以0 x或0X开头的数是十六进制数,例如0 x3a代表十六进制数(3a)16,等于十进制数58;-0 x56代表十六进制数(56)16,等于十进制-88。
7、(2)(2)整型变量整型变量1 1)基本型:以)基本型:以intint表示,长度为两个字节。表示,长度为两个字节。2 2)短整型:以)短整型:以short short intint表示,长度为两个字节。表示,长度为两个字节。3 3)长整型:以)长整型:以long long intint表示,长度为四个字节。表示,长度为四个字节。以以unsignedunsigned表示,这种类型与前表示,这种类型与前3 3种类型匹配而构种类型匹配而构成无符号整型、无符号短整型和无符号长整型。成无符号整型、无符号短整型和无符号长整型。注意:注意:intint,short,short intint,long,lon
8、g intint的缺省类型为有的缺省类型为有符号型。符号型。(2)(2)整型变量整型变量说明整型变量的一般形式为:类型说明符 变量名,变量名,;同类型的整型变量之间和不同类型的整型变量之间都可以进行算术运算。整型变量和字符型变量之间也可以进行算术运算。3.3.浮点型(浮点型(floatfloat)(1)浮点型常量浮点常量只有十进制这一种进制,并且都被默认为double型。对于绝对值小于1的浮点数可省略小数点前面的零,如.654就是0.654的缩略形式。科学计数法:-3.3E9由尾数和阶两部分构成的,-3.3E9表示:-3.3109。3.3.浮点型(浮点型(floatfloat)(2)浮点型变量
9、浮点型变量分为单精度型(float)和双精度型(double),长度都是4个字节浮点型变量定义方法:float a;double b;4.4.指针型指针型指针型是一种特殊的数据类型,其本身就是一个变量,但在其中存放的是另一个数据的地址。在C51中,指针的长度一般是3个字节。根据所指向的变量类型的不同指针变量也有不同的类型,指针变量的类型也就表示了该指针指向的地址中的数据的类型。4.4.指针型指针型指针类型的表示方法是在指针符号“*”前面冠以数据类型符号例如:char*pa;/定义pa为字符型指针unsigned int*pb;/定义pb为无符号整形指针float*pf;/定义pf为浮点型指针5
10、.5.位变量(位变量(bitbit)位变量的长度是1位(bit),位变量和前面介绍的字符型变量是可以直接被8051单片机处理的。位变量的值可以取0(false)或1(true)。对位变量进行定义的语法如下:bit flag1;bit send_en=1;注意:不能定义一个位变量指针,如不能定义bit*flagl;也不能定义一个位变量数组,如不能定义bit flags3。5.5.位变量(位变量(bitbit)与8051单片机硬件特性操作有关的位变量必须定位在8051单片机片内RAM的可位寻址空间中,也就是字节地址为20H-2FH的16个节单元。6 6、特殊功能寄存器(、特殊功能寄存器(sfrsf
11、r)sfr类型的长度为一个字节,其定义方式如下:sfr 特殊功能寄存器名=地址常量;说明“地址常量”就是所定义的特殊功能寄存器的地址,例如:sfrsfr P1=0 x90;P1=0 x90;sfrsfr SCON=0 x98;SCON=0 x98;注意:在关键字sfr后面必须是一个名字,名字可以任意选取,但应符合一般的习惯。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H0FFH)在头文件reg51.h中对所有的特殊功能寄存器都进行了定义。7.167.16位特殊功能寄存器(位特殊功能寄存器(sfr16sfr16)在新一代的8051单片机中,特殊
12、功能寄存器在功能上经常组合成16位来使用。为了有效地访问这种16位的特殊功能寄存器,可采用关键字sfrl6。sfrl6类型的长度为两个字节,其定义语法与8位SFR相同,但16位SFR的低端地址必须作为sfr16的定义地址。例如 sfr16 T2=0CCH;/定义TIMER2,其地址为T2L=0CCH、T2H=0CDH注意:这种定义方法适用于所有新一代的8051单片机中新增加的特殊功能寄存器,但不能用于定时器/计数器TIMER0和TIMER1的定义。8.8.可寻址位(可寻址位(sbitsbit)(1)sbit (1)sbit 位变量名位变量名=位地址位地址这种方法将位的绝对地址赋给位变量,位地址
13、必须位于80H0FFH之间。(2)sbit (2)sbit 位变量名位变量名=特殊功能寄存器名特殊功能寄存器名 位位置位位置当可寻址位位于特殊功能寄存器种时可采用这种方法,“位位置”是一个07之间的常数。(3)sbit (3)sbit 位变量名位变量名=字节地址位位置字节地址位位置这种方法以一个常数(字节地址)作为基础,该常数必须在80H0FH之间。“位位置”是一个0-7之间的常数。sbit是一个独立的关键字,不要与关键字bit相混淆。2.1.3 C512.1.3 C51的运算量的运算量1、常量程序运行期间其值不能被改变的量,即常数。数值型常量:3、3.5、-9字符常量:a、n字符串常量:”I
14、nput Information-1”2.2.3 C512.2.3 C51的运算量的运算量2、变量程序运行过程中其值可以改变的量。变量名:标识符 x变量值:变量存储单元中的数据 8变量类型:值的大小由其类型来决定变量要“先定义、后使用”8x 2.2.3 C512.2.3 C51的运算量的运算量变量的定义变量的名字变量的数据类型系统根据数据类型为变量分配内存空间变量的取值范围变量可以进行的操作 存储种类存储种类 数据类型数据类型 存储器类型存储器类型 变量名表;变量名表;完整的变量定义格式:完整的变量定义格式:(1 1)存储种类)存储种类 1)自动变量函数体内部或者复合语句中定义的变量,如果省略
15、存储种类说明或者在变量名前面加上存储种类说明符“auto”,即可将该变量定义为自动变量。通常采用缺省形式,即省略存储种类说明。自动变量的作用域在定义其的函数体或复合语句内部。自动变量始终是相对于函数或复合语句的局部变量。(1 1)存储种类)存储种类2)外部变量在所有函数外部定义的变量或者使用存储种类说明符“extern”定义的变量称为外部变量,一个外部变量被定义后,就被分配了固定的内存空间,并且可以被一个程序中的所有函数使用外部变量属于全局变量,其作用域是整个程序,在程序的任何地方均可以对这种变量进行访问如果外部变量与自动变量有同名变量,则只有自动变量起作用。(1 1)存储种类)存储种类3)静
16、态变量静态变量的定义方法是在类型定义语句之前加关键字static。内部静态变量是在函数内部定义的,与自动变量相比,其作用域同样限于定义内部静态变量的函数内部,但内部静态变量始终都是存在的,其初值只是在进入时赋值一次,退出函数之后变量的值仍然保存但不能访问。外部静态变量是在函数外部被定义的,与外部变量相比,其作用域同样是从定义点开始,一直到程序结束,但外部静态变量只能在被定义的模块文件中访问,其数据值可以为该文件内所有的函数所共享,退出该文件后,虽然变量的值仍然保存着,但不能被其他模块文件访问。内部静态变量的用法示例内部静态变量的用法示例#include#includevoid main()ch
17、ar i;SCON=0 x52;TMOD=0 x20;TH1=0XE8;TR1=1;for(i=1;i”右移运算符用来将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃。对无符号数或者有符号数中的正数,左边高位移入0;对有符号数中的负数,左边高端移入1。右移1位相当于除以2,右移n位相当于除以2n,因此a2相当于a/4。(6)(6)左移运算符左移运算符“”右移运算符用来将一个数的各二进制位全部左移若干位,移到左端的高位被舍弃,右边的低位补0。左移1位相当于乘以2,左移n位相当于乘以除以2n。7.7.复合赋值运算符复合赋值运算符凡是二目运算符都可以和赋值运算符结合组成复合赋值运算符。C语言
18、规定可以使用以下10种复合赋值表达式:+=、-=、*=、/=、%=、=、&=、|=、=复合赋值表达式的一般形式为:变量 复合赋值运算符 表达式8.8.逗号运算符与逗号表达式逗号运算符与逗号表达式C51提供了一种特殊运算符逗号运算符,用逗号运算符可以把两个或多个表达式连接起来,形成逗号表达式。逗号表达式的一般形式为:表达式表达式1,表达式式,表达式式2,、表达式、表达式n逗号表达式的求解过程是从左到右依次计算出每个表达式的值,整个逗号表达式的值等于最右边的表达式(表达式n)的值。并非程序中任何地方出现的逗号都是逗号运算符,例如在变量定义或函数参数表中,逗号就不是逗号运算符,而是用作各变量之间的间
19、隔符。9.9.条件运算符与条件表达式条件运算符与条件表达式条件运算符“?:”是惟一的一个三目运算符,条件表达式的一般形式为:逻辑表达式?表达式1:表达式2条件表达式的求解过程是首先计算逻辑表达式的值,如果为1(true),则整个表达式值为表达式1的值,否则为表达式2的值。10.10.指针与地址运算符指针与地址运算符C51提供了“”与“”两个单目运算符,前者的作用是返回一个地址内的变量值,取内容;后者的作用是返回操作数的地址,即取地址。这两种运算的一般形式分别为:变量变量=*指针变量;指针变量;指针变量指针变量=&目标变量;目标变量;取内容运算是将指针变量所指向的目标变量的值赋给左边的变量;取地址运算是将目标变量的地址赋给左边的变量。11.C5111.C51运算符的优先级运算符的优先级C51语言规定了运算符的优先级。在对有多个运算符参加运算的表达式求值时,按照运算符的优先级别高低次序执行。11.C5111.C51运算符的优先级运算符的优先级课堂作业(分组完成)课堂作业(分组完成)针对任务一中的电路图,先使D1、D3、D5、D7亮,其他灯灭;再使右4灯维持原状,而左4灯亮;再使D3D6熄,其他灯维持原状;再使右4灯状态变反,其他不变;然后所有灯状态变反;最后使所有灯的状态向左流动一次。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。