C51基本语法

上传人:da****ge 文档编号:243299837 上传时间:2024-09-20 格式:PPT 页数:49 大小:200.50KB
返回 下载 相关 举报
C51基本语法_第1页
第1页 / 共49页
C51基本语法_第2页
第2页 / 共49页
C51基本语法_第3页
第3页 / 共49页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机接口技术,(C51,版,),第一章,C51,基本语法,内容概述,数据类型和运算符、表达式是是,C51,语言程序设计的最基础知识,,C51,语言把数据分成了多种数据类型,并提供了丰富的运算对数据进行处理。本章对,C51,语言的基本数据类型、常量变量、运算符及表达式等进行详细介绍。,教学目标,1,掌握数据类型的概念,了解,C51,语言能够处理的数据类型。,2,掌握常量的概念,掌握各种类型常量的特点及表示形式。,3,掌握变量的概念,了解,int,、,float,、,char,型变量的特点,掌握这三种类型变量的定义、赋值和使用方法。理解,C51,中变量的存储和编译模式的关系,掌握单片机片内资源的访问方法。,4,了解,C51,语言的基本运算符及其特点,掌握运算符的优先级和结合性的概念。,5,了解算术运算表达式、关系表达式及逻辑表达式的特点,熟练进行表达式计算,能熟练进行实际问题的表达式描述。,6,熟悉自增、自减运算的特点,掌握赋值运算,了解逗号运算符和逗号表达式。,7,掌握数据类型转换的概念,能进行基本的数据类型转换。,1,1 C51,基本数据类型,具有一定格式的数字或数值叫做数据,数据的不同格式叫作数据类型。任何程序设计都离不开数据的处理。,C5l,的数据类型有位型,(bit),、无符号字符,(unsigned char),、有符号字符,(signed char),、无符号整型,(unsigned,int,),、有符号整型,(signed,int,),、无符号长型,(unsigned long),、有符号长型,(signed long),、浮点,(float),和指针类型等。其中,short,与,long,属整型数据、,float,与,double,型属浮点型数据。,数据类型,长,度,值,域,范,围,bit,1 bit,0,1,sbit,1 bit,0,1,unsigned char,1 byte,0255,signed char,1 byte,-128127,sfr,1 byte,0255,unsigned,int,2 byte,065536,signed,int,2 byte,-3276832767,sfr16,2 byte,065536,*,13 byte,对象的地址,unsigned long,4 byte,04294967295,signed long,4 byte,-21474836482147483647,float,4 byte,+,1.175494E-38,+,3.402823E+38,当程序中出现表达式或变量赋值运算时,若运算对象的数据类型不一致,数据类型可以自动进行转换,转换按以下优先级别自动进行:,bit char,int,long float,unsigned signed,1,2,常量与变量,1,2,1,常量,在程序运行中其值不能改变的量称为常量。,1,整型常量。可以表示为十进制如,123,0,,,-8,等。十六进制则以,0x,开头如,0x34,。长整型就在数字后面加字母,L,,如,10L,,,0xF340L,等。,2,浮点型常量。分为十进制和指数表示形式。十进制由数字和小数点组成,如,0.888,3345.345,0.0,等,整数或小数部分为,0,时可以省略,0,但必须有小数点。指数表示形式为:,数字,.,数字,e,数字, ,中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如,123e3,5e6,-1.0e-3,。而,e3,5e4.0,则是非法的表示形式。,3,字符型常量是单引号内的字符,如,a,d,等。,4,字符串型常量由双引号内的字符组成,如,hello,english,等。当引号内的没有字符时,为空字符串。,用标识符代表的常量称为符号常量。,例如,:,在指令“,#define PI 3.1415926”,后,符号常量,PI,即代表圆周率,3.1415926,。,1.2.2,变量,1.2.2.1,变量类型,在程序运行中,其值可以改变的量称为变量,一个变量主要由两部分构成:一个是变量名,一个是变量值。,每个变量都有一个变量名,在内存中占据一定的存储单元,(,地址,),,并在该内存单元中存放该变量的值。,C51,支持的变量通常有如下类型:,位变量,(bit),位变量的值可以是,1(true),或,0(false),。与,805l,硬件特性操作有关的位变量必须定位在,8051CPU,片内存储区,(RAM),的可位寻址空间中。,字符变量,(char),字符变量的长度为,l byte,,即,8,位。,C51,编译器默认的字符型变量为无符号型,(unsigned char),。负数在计算机中存储时一般用补码表示。,整型变量,(,int,),整型变量的长度为,16,位。,8051,系列,CPU,将整型变量的,msb,存放在低地址字节。有符号整型变量,(signed,int,),也使用,msb,位作为标志位,并使用二进制的补码表示数值。 长整型变量,(1ong,int,),长整型变量占用,4,个字节,(byte),,其它方面与整型变量,(,int,),相似。,浮点型变量,(float),浮点型变量占,4,个字节,(byte),,许多复杂的数学表达式都采用浮点变量数据类型。它用符号位表示数的符号,用阶码和尾数表示数的大小。用它们进行任何数学运算都需要使用由编译器决定的各种不同效率等级的库函数。(补充存储格式),在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型。其方法是在源程序开头使用,#define,语句。,例如:,#define,uchar,unsigned char,#define,uint,unsigned,int,1.2.2.2,变量的存储,变量的存储器类型是指该变量在,8051,单片机硬件系统中所使用的存储区域,并在编译时准确的定位。,8051,系列单片机将程序存储器,(ROM),和数据存储器,(RAM),分开,并各有各自的寻址机构和寻址方式。,8051,系列单片机在物理上有四个存储空间:,*片内程序存储器空间;,*片外程序存储器空间,,*片内数据存储器空间;,*片外数据存储器空间,KEIL uVision2,所能支持的存储器类型,:,存储器类型,说 明,data,直接访问内部数据存储器(,128,字节,),访问速度最快,bdata,可位寻址内部数据存储器(,16,字节),允许位与字节混合访问,idata,间接访问内部数据存储器(,256,字节),允许访问全部,256B,地址,pdata,分页访问外部数据存储器(,256,字节),用,MOVX ,Ri,指令访问,xdata,外部数据存储器,(64KB),,用,MOVX DPTR,指令访问,code,程序存储器(,64KB,),用,MOVC A+DPTR,指令访问,注意的是在,AT89C51,芯片中,RAM,只有低,128,位,位于,80H,到,FFH,的高,128,位则在,52,芯片中才有用,并和特殊寄存器地址重叠。,定义变量时如果省略存储器类型,系统则会按编译模式,SMALL,、,COMPACT,或,LARGE,所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的,8051,存储区范围,然而把最常用的变量、命令放在内部数据区可以显著的提高系统性能。,C51,支持的主要编译模式,存储模式,说 明,SMALL,函数参数及局部变量放在片内,RAM,(默认变量类型为,DATA,,最大,128,字节)。另外所有对象包括栈都优先放置于片内,RAM,,当片内,RAM,用满,再向片外,RAM,放置。,COMPACT,参数及局部变量放在片外,RAM,(默认的存储类型是,PDATA,,最大,256,字节);通过,R0,、,R1,间接寻址,栈位于,8051,片内,RAM,。,LARGE,参数及局部变量直接放入片外,RAM(,默认的存储类型是,XDATA,,最大,64KB),;使用数据指针,DPTR,间接寻址。因此访问效率较低且直接影响代码长度,1.2. 3 8051,片内资源及位变量,1.2.3.1,特殊功能寄存器的,C51,定义,8051,单片机的内部高,128,个字节为专用寄存器区,其中,51,子系列有,21,个(,52,子系列有,26,个)特殊功能寄存器(,SFR,),它们离散的分布在这个区中,分别用于,CPU,并行口、串行口、中断系统、定时,/,计数器等功能单元及控制和状态寄存器。,对,SFR,的操作,只能采用直接寻址方式。为了能直接访问这些特殊功能寄存器,,Keil,C51,扩充了两个关键字“,sfr,”,、“,sfr16”,,可以直接对,51,单片机的特殊寄存器进行定义,这种定义方法与标准,C51,语言不兼容,只适用于对,8051,系列单片机,C51,编程。,定义方法如下:,sfr,特殊功能寄存器名,=,特殊功能寄存器地址常数,;,sfr16,特殊功能寄存器名,=,特殊功能寄存器地址常数,;,对于,8051,片内,I/O,口,定义方法如下:,sfr,P1 = 0x90; /,定义,P1,口,地址,90H,sfr,P2 = 0xA0; /,定义,P1,口,地址,A0H,sfr,后面是一个要定义的名字,要符合标识符的命名规则,名字最好有一定的含义,等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(,80H-FFH,)。,sfr,是定义,8,位的特殊功能寄存器,,sfr16,用来定义,16,位特殊功能寄存器,如,8052,的,T2,定时器,可以定义为:,sfr16 T2 = 0xCC; /,这里定义,8052,定时器,2,,地址为,T2L=CCH,T2H=CDH,用,sfr16,定义,16,位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是,,sfr16,不能用于定时器,0,和,1,的定义。,对于需要单独访问,SFR,中的位,,C51,的扩充关键字,sbit,可以访问位寻址对象。,sbit,定义某些持殊位,并接受任何符号名,“=”,号后将绝对地址赋给变量名,这种地址分配,有三种方法:,1)sbit,位变量名位地址,sbit,P1_1 = Ox91;,这样是把位的绝对地址赋给位变量。,同,sfr,一样,,sbit,的位地址必须位于,80HFFH,之间。,2)Sbit,位变量名特殊功能寄存器名位位置,sfr,P3 = 0xB0;,sbit,P3_1 = P3 1; /,先定义一个特殊功能寄存器名,再指定位变量名所在的位置。,当可寻址位位于特殊功能寄存器中时可采用这种方法。,3)sbit,位变量名字节地址,位位置,sbit,P3_1 = 0xB0 1;,1.2.3.,2,位寻址区及位变量定义,C51,提供一个,bdata,的存储器类型,用于访问单片机的可位寻址区的数据,如,:,unsigned char,bdata,age; /,在位寻址区定义,ucsigned,char,类型的变量,age,int,bdata,score2; /,在可位寻址区定义数组,score2,sbit,flag=age7 /,用关键字,sbit,定义位变量来独立访问可寻址位对象的其中一位,C51,提供关键字“,bit”,实现位变量的定义及访问。,bit flag; /,将,flag,定义为位变量,bit,valve_state,; /,将,valve_state,定义为位变量,通常,C51,编译器会将位变量分配在位寻址区的某一位。,定义位变量时应注意以下问题,1,)位变量不能定义成一个指针,如不能定义:,bit * POINTER,。,2),不能定义位数组,如不能定义,: bit array2,。,3) bit,与,sbit,的不同。,bit,不能指定位变量的绝对地址,当需要指定位变量的绝对地址(范围必须在,0x80-0xff,)时,需要使用,sbit,来定义。,例:,sbit,flag=P10;,也可使用,sbit,访问可位寻址对象的位。,bdata,char,jj,;,*,jj,定义为,bdata,整型变量*,int,bdata,sum2;,/*,在可位寻址区定义数组,sum2,,也称为可寻址位对象*,/,sbit,mybit7=jj7,; *,mybit7,定义为,jj,的第,7,位*,/,sbit,score12=sum112;,*,score12,定义为,sum1,的第,12,位*,/,可位寻址对象也可以字节寻址。,例,:,jj,=0;,*,jj,赋值为,0*,sbit,定义要求基址对象的存储类型为,bdata,,否则只有绝对的特殊位定义,(,sbit,),是合法的。位置,(,操作符,),后的最大值依赖于指定的访问对象型,对于,char,、,uchar,而言是,0-7,,对于,int,、,uint,而言是,015,。,sbit,定义要求基址对象的存储类型为,bdata,,否则只有绝对的特殊位定义,(,sbit,),是合法的。位置,(,操作符,),后的最大值依赖于指定的访问对象型,对于,char,、,uchar,而言是,0-7,,对于,int,、,uint,而言是,015,。,1.3,自定义变量类型,typedef,通常定义变量的数据类型时都是使用标准的关键字,方便别人阅读程序。但使用,typedef,可以有方便程序的移植和简化较长的数据类型定义,例如,:,程序设计者对变量的定义习惯了,DELPHI,的关键字,如整型数据习惯用关键字,integer,来定义,在用,C51,时还想用,integer,的话,你可以这样写:,typedef,int,integer;,integer,a,b,;,1.4,运算符与表达式,1.4.1,赋值运算,利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加,“,;,”,便构成了赋值语句。,使用,=,的赋值语句格式如下:,变量,=,表达式;,例如:,a = 0x10; /,将常数十六进制数,10,赋于变量,a,b = c = 2; /,同时将,2,赋值给变量,b,c,d = e; /,将变量,e,的值赋于变量,d,f =,d-e,; /,将变量,d-e,的值赋于变量,f,赋值语句的意义就是先计算出,=,右边的表达式的值,然后将得到的值赋给左边的变量。而且右边的表达式可以是一个赋值表达式。,1.4.2,算术运算,1.4.2.1,算术运算符及算术表达式,C51,中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符:,十,(,加法运算符,或正值符号,),- (,减法运算符,或负值符号,),* (,乘法运算符,),/ (,除法运算将,),(,模,(,求余,),运算符。例如,5%3,结果是,5,除以,3,所得的余数,2),用算术运算符和括号将运算对象连接起来的式子称为算术表达式。运算对象包括常量、变量、函数、数组、结构体等等。,算术表达式的形式:,表达式,1,算术运算符表达式,2,例如:,a+b, (x+4)/(y-b),,,y-sin(x)/2,1.4.2.2,算术运算的优先级与结合性,算术运算符的优先级规定为:先乘除模,后加减,括号最优先。乘、除、模运算符的优先级相同,并高于加减运算符。括号中的内容优先级最高。,a+b,*c,;,/,乘号的优先级高于加号,故先运算,b*c,,所得的结果再与,a,相加,(,a+b,)*(c-d)-6,;,/,括号的优先级最高,*次之,减号优先级最低故先运算,(,a+b,),和,(,c-d,),,,/,然后将二者的结果相乘,最后再与,6,相减,算术运算的结合性规定为自左至右方向,称为“左结合性”。即当一个运算对象两边的算术运算符优先级相同时,运算对象先与左面的运算符结合。,a+b-c,;,/ b,两边是“,+”,、“,-”,运算符优先级相同,按左结合性优先执行,a+b,再减,C,1.4.2.3,数据类型转换运算,当运算符的两侧的数据类型不同时必须通过数据类型转换将数据转换成同种类型。 转换的方式有两种:自动类型转换和强制类型转换。,自动类型转换,由,C51,编译器编译时自动进行。,如图,1-4-1,所示为自动数据类型转换规则。,char,int,long,float,double,unsigned signed,低 高,图,1-4-1,数据类型转换规则,强制类型转换,需要使用强制类型转换运算符,其格式为:,(,类型名,) (,表达式,),;,例如:,(,double)xx,/,将,xx,强制转换成,double,类型。,(,int)(a+b,) /,将,a+b,的值强制转换成,int,类型。,使用强制转换类型运算符后,运算结果被强制转换成规定的类型。,例如:,unsigned char,x,y,;,unsigned char z;,z,(unsigned,char)(x,*y);,1.4.3,关系运算,1.4.3.1,关系运算符,(,小于,),(,大于,),(,小于或等于,),(,大于或等于,),(,等于,),!,(,不等于,),关系运算符同样有着优先级别。前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后两个。,关系运算符的结合性为左结合。,1.4.3.2,关系表达式,关系表达式就是用关系运算符连接起来两个表达式。,关系表达式通常是用来判别某个条件是否满足。,要注意的是用关系运算符的运算结果只有,0,和,1,两种,也就是逻辑的真与假,当指定的条件满足时结果为,1,,不满足时结果为,0,。,关系表达式结构如下:,表达式,1,关系运算符表达式,2,例如:,a,b,;,/,若,a,大于,b,,则表达式值为,1,(真),b+c,a,;,/,若,a=3,b=4,c=5,则表达式值为,0,(假),(a,b),c,;,/,若,a=3,b=2,c=1,则表达式值为,1,(真)。因为,a,b,值为,1,,等于,c,值,c,5,a,b,;,/,若,a=3,b=2,c=1,则表达式值为,0,(假)。,1.4.4,逻辑运算,关系运算符反映两个表达式之间的大小等于关系,逻辑运算符则用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式了。,C51,提供三种逻辑运算:,逻辑与,(&),逻辑或,( | | ),逻辑非,( ! ),逻辑表达式的一般形式为:,逻辑与:条件式,1 &,条件式,2,逻辑或:条件式,1 | |,条件式,2,逻辑非,: !,条件式,逻辑表达式的结合性为自左向右。逻辑表达式的值应该是一个逻辑值“真”或“假”, 以,0,代表假,以,1,代表真。,逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。,逻辑表达式的运算结果不是,0,就是,1,,不可能是其它值。,C51,逻辑运算符与算术运算符、关系运算符、赋值运算符之间优先级的次序如图,1-3-2,所示。,!(非),算术运算符,关系运算符,&,和,| |,赋值运算符,高 低,优 先 级,图,1-3-2,运算符的优先级,1.4.5,位运算,C51,语言直接面对,8051,单片机,对于,8051,单片机强大灵活的位处理能力也提供了位操作指令。,C51,中共有,6,种位运算符:,&,按位与,|,按位或,按位异或,按位取反,位右移,位运算符的作用是按位对变量进行运算,但是并不改变参与运算的变量的值。,如果要求按位改变变量的值,则要利用相应的赋值运算。,应当注意的是位运算符不能对浮点型数据进行操作。,按位与、或、异或的真值表如表,1-4-1,所示。,表,1-4-1,与、或、异或位操作真值表,XYX&YX|YXY,00000,01011,10011,11110,位运算一般的表达形式如下:,变量,1,位运算符 变量,2,位运算符也有优先级。从高到低依次是,: |(,按位或,)(,按位异或,)&(,按位与,)(,右移,)=,右移位赋值,-=,减法赋值,&=,逻辑与赋值*,=,乘法赋值,|=,逻辑或赋值,/=,除法赋值,=,逻辑异或赋值,%=,取模赋值,=,逻辑非赋值,b),?,a : b,1.4.8,逗号运算符,可以用它将两个或多个表达式连接起来,形成逗号表达式。,逗号表达式的一般形式为:,表达式,1,,表达式,2,,表达式,3,表达式,n,这样用逗号运算符组成的表达式在程序运行时,是从左到右计算出各个表达式的值,而整个用逗号运算符组成的表达式的值等于最右边表达式的值,就是,“,表达式,n”,的值。,在实际的应用中,大部分情况下,使用逗号表达式的目的只是为了分别得到名个表达式的值,而并不一定要得到和使用整个逗号表达式的值。,并不是在程序的任何位置出现的逗号,都可以认为是逗号运算符。如函数中的参数,参数之间的逗号只是用来间隔之用而不是逗号运算符。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!