已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机接口技术(C51版),第一章C51基本语法,1,内容概述,数据类型和运算符、表达式是是C51语言程序设计的最基础知识,C51语言把数据分成了多种数据类型,并提供了丰富的运算对数据进行处理。本章对C51语言的基本数据类型、常量变量、运算符及表达式等进行详细介绍。,2,教学目标,1掌握数据类型的概念,了解C51语言能够处理的数据类型。2掌握常量的概念,掌握各种类型常量的特点及表示形式。3掌握变量的概念,了解int、float、char型变量的特点,掌握这三种类型变量的定义、赋值和使用方法。理解C51中变量的存储和编译模式的关系,掌握单片机片内资源的访问方法。4了解C51语言的基本运算符及其特点,掌握运算符的优先级和结合性的概念。5了解算术运算表达式、关系表达式及逻辑表达式的特点,熟练进行表达式计算,能熟练进行实际问题的表达式描述。6熟悉自增、自减运算的特点,掌握赋值运算,了解逗号运算符和逗号表达式。7掌握数据类型转换的概念,能进行基本的数据类型转换。,3,11C51基本数据类型,具有一定格式的数字或数值叫做数据,数据的不同格式叫作数据类型。任何程序设计都离不开数据的处理。C5l的数据类型有位型(bit)、无符号字符(unsignedchar)、有符号字符(signedchar)、无符号整型(unsignedint)、有符号整型(signedint)、无符号长型(unsignedlong)、有符号长型(signedlong)、浮点(float)和指针类型等。其中short与long属整型数据、float与double型属浮点型数据。,4,5,当程序中出现表达式或变量赋值运算时,若运算对象的数据类型不一致,数据类型可以自动进行转换,转换按以下优先级别自动进行:bitcharintlongfloatunsignedsigned,6,12常量与变量,121常量在程序运行中其值不能改变的量称为常量。1整型常量。可以表示为十进制如123,0,-8等。十六进制则以0 x开头如0 x34。长整型就在数字后面加字母L,如10L,0 xF340L等。2浮点型常量。分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0等,整数或小数部分为0时可以省略0但必须有小数点。指数表示形式为:数字.数字e数字中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如123e3,5e6,-1.0e-3。而e3,5e4.0则是非法的表示形式。3字符型常量是单引号内的字符,如a,d等。4字符串型常量由双引号内的字符组成,如hello,english等。当引号内的没有字符时,为空字符串。,7,用标识符代表的常量称为符号常量。例如:在指令“#definePI3.1415926”后,符号常量PI即代表圆周率3.1415926。,8,1.2.2变量1.2.2.1变量类型在程序运行中,其值可以改变的量称为变量一个变量主要由两部分构成:一个是变量名,一个是变量值。每个变量都有一个变量名,在内存中占据一定的存储单元(地址),并在该内存单元中存放该变量的值。,9,C51支持的变量通常有如下类型:位变量(bit)位变量的值可以是1(true)或0(false)。与805l硬件特性操作有关的位变量必须定位在8051CPU片内存储区(RAM)的可位寻址空间中。字符变量(char)字符变量的长度为lbyte,即8位。C51编译器默认的字符型变量为无符号型(unsignedchar)。负数在计算机中存储时一般用补码表示。整型变量(int)整型变量的长度为16位。8051系列CPU将整型变量的msb存放在低地址字节。有符号整型变量(signedint)也使用msb位作为标志位,并使用二进制的补码表示数值。长整型变量(1ongint)长整型变量占用4个字节(byte),其它方面与整型变量(int)相似。浮点型变量(float)浮点型变量占4个字节(byte),许多复杂的数学表达式都采用浮点变量数据类型。它用符号位表示数的符号,用阶码和尾数表示数的大小。用它们进行任何数学运算都需要使用由编译器决定的各种不同效率等级的库函数。(补充存储格式),10,在编程时,为了书写方便,经常使用简化的缩写形式来定义变量的数据类型。其方法是在源程序开头使用#define语句。例如:#defineucharunsignedchar#defineuintunsignedint,11,1.2.2.2变量的存储变量的存储器类型是指该变量在8051单片机硬件系统中所使用的存储区域,并在编译时准确的定位。8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并各有各自的寻址机构和寻址方式。8051系列单片机在物理上有四个存储空间:*片内程序存储器空间;*片外程序存储器空间,*片内数据存储器空间;*片外数据存储器空间,12,KEILuVision2所能支持的存储器类型:,13,注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。,14,定义变量时如果省略存储器类型,系统则会按编译模式SMALL、COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的变量、命令放在内部数据区可以显著的提高系统性能。,15,C51支持的主要编译模式,16,1.2.38051片内资源及位变量1.2.3.1特殊功能寄存器的C51定义8051单片机的内部高128个字节为专用寄存器区,其中51子系列有21个(52子系列有26个)特殊功能寄存器(SFR),它们离散的分布在这个区中,分别用于CPU并行口、串行口、中断系统、定时/计数器等功能单元及控制和状态寄存器。,17,对SFR的操作,只能采用直接寻址方式。为了能直接访问这些特殊功能寄存器,KeilC51扩充了两个关键字“sfr”、“sfr16”,可以直接对51单片机的特殊寄存器进行定义,这种定义方法与标准C51语言不兼容,只适用于对8051系列单片机C51编程。,18,定义方法如下:sfr特殊功能寄存器名=特殊功能寄存器地址常数;sfr16特殊功能寄存器名=特殊功能寄存器地址常数;对于8051片内I/O口,定义方法如下:sfrP1=0 x90;/定义P1口,地址90HsfrP2=0 xA0;/定义P1口,地址A0Hsfr后面是一个要定义的名字,要符合标识符的命名规则,名字最好有一定的含义等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H-FFH)。sfr是定义8位的特殊功能寄存器,sfr16用来定义16位特殊功能寄存器,如8052的T2定时器,可以定义为:,19,sfr16T2=0 xCC;/这里定义8052定时器2,地址为T2L=CCH,T2H=CDH用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是,sfr16不能用于定时器0和1的定义。对于需要单独访问SFR中的位,C51的扩充关键字sbit可以访问位寻址对象。,20,sbit定义某些持殊位,并接受任何符号名,“=”号后将绝对地址赋给变量名这种地址分配,有三种方法:1)sbit位变量名位地址sbitP1_1=Ox91;这样是把位的绝对地址赋给位变量。同sfr一样,sbit的位地址必须位于80HFFH之间。2)Sbit位变量名特殊功能寄存器名位位置sfrP3=0 xB0;sbitP3_1=P31;/先定义一个特殊功能寄存器名,再指定位变量名所在的位置。当可寻址位位于特殊功能寄存器中时可采用这种方法。3)sbit位变量名字节地址位位置sbitP3_1=0 xB01;,21,1.2.3.2位寻址区及位变量定义,C51提供一个bdata的存储器类型,用于访问单片机的可位寻址区的数据如:unsignedcharbdataage;/在位寻址区定义ucsignedchar类型的变量ageintbdatascore2;/在可位寻址区定义数组score2sbitflag=age7/用关键字sbit定义位变量来独立访问可寻址位对象的其中一位C51提供关键字“bit”实现位变量的定义及访问。bitflag;/将flag定义为位变量bitvalve_state;/将valve_state定义为位变量通常C51编译器会将位变量分配在位寻址区的某一位。,22,定义位变量时应注意以下问题,1)位变量不能定义成一个指针,如不能定义:bit*POINTER。2)不能定义位数组,如不能定义:bitarray2。3)bit与sbit的不同。bit不能指定位变量的绝对地址,当需要指定位变量的绝对地址(范围必须在0 x80-0 xff)时,需要使用sbit来定义。例:sbitflag=P10;,23,也可使用sbit访问可位寻址对象的位。bdatacharjj;*jj定义为bdata整型变量*intbdatasum2;/*在可位寻址区定义数组sum2,也称为可寻址位对象*/sbitmybit7=jj7;*mybit7定义为jj的第7位*/sbitscore12=sum112;*score12定义为sum1的第12位*/,24,可位寻址对象也可以字节寻址。例:jj=0;*jj赋值为0*sbit定义要求基址对象的存储类型为bdata,否则只有绝对的特殊位定义(sbit)是合法的。位置(操作符)后的最大值依赖于指定的访问对象型,对于char、uchar而言是0-7,对于int、uint而言是015。sbit定义要求基址对象的存储类型为bdata,否则只有绝对的特殊位定义(sbit)是合法的。位置(操作符)后的最大值依赖于指定的访问对象型,对于char、uchar而言是0-7,对于int、uint而言是015。,25,1.3自定义变量类型typedef,通常定义变量的数据类型时都是使用标准的关键字,方便别人阅读程序。但使用typedef可以有方便程序的移植和简化较长的数据类型定义例如:程序设计者对变量的定义习惯了DELPHI的关键字,如整型数据习惯用关键字integer来定义,在用C51时还想用integer的话,你可以这样写:typedefintinteger;integera,b;,26,1.4运算符与表达式,1.4.1赋值运算利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加“;”便构成了赋值语句。使用=的赋值语句格式如下:变量=表达式;例如:a=0 x10;/将常数十六进制数10赋于变量ab=c=2;/同时将2赋值给变量b,cd=e;/将变量e的值赋于变量df=d-e;/将变量d-e的值赋于变量f赋值语句的意义就是先计算出=右边的表达式的值,然后将得到的值赋给左边的变量。而且右边的表达式可以是一个赋值表达式。,27,1.4.2算术运算,1.4.2.1算术运算符及算术表达式C51中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符:十(加法运算符,或正值符号)-(减法运算符,或负值符号)*(乘法运算符)/(除法运算将)(模(求余)运算符。例如5%3结果是5除以3所得的余数2),28,用算术运算符和括号将运算对象连接起来的式子称为算术表达式。运算对象包括常量、变量、函数、数组、结构体等等。算术表达式的形式:表达式1算术运算符表达式2例如:a+b,(x+4)/(y-b),y-sin(x)/2,29,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,30,1.4.2.3数据类型转换运算,当运算符的两侧的数据类型不同时必须通过数据类型转换将数据转换成同种类型。转换的方式有两种:自动类型转换和强制类型转换。,31,自动类型转换,由C51编译器编译时自动进行。如图1-4-1所示为自动数据类型转换规则。,32,强制类型转换,需要使用强制类型转换运算符,其格式为:(类型名)(表达式);例如:(double)xx/将xx强制转换成double类型。(int)(a+b)/将a+b的值强制转换成int类型。使用强制转换类型运算符后,运算结果被强制转换成规定的类型。例如:unsignedcharx,y;unsignedcharz;z(unsignedchar)(x*y);,33,1.4.3关系运算,1.4.3.1关系运算符(小于)(大于)(小于或等于)(大于或等于)(等于)!(不等于)关系运算符同样有着优先级别。前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后两个。关系运算符的结合性为左结合。,34,1.4.3.2关系表达式,关系表达式就是用关系运算符连接起来两个表达式。关系表达式通常是用来判别某个条件是否满足。要注意的是用关系运算符的运算结果只有0和1两种,也就是逻辑的真与假,当指定的条件满足时结果为1,不满足时结果为0。关系表达式结构如下:表达式1关系运算符表达式2,35,例如:ab;/若a大于b,则表达式值为1(真)b+ca;/若a=3,b=4,c=5,则表达式值为0(假)(ab)c;/若a=3,b=2,c=1,则表达式值为1(真)。因为ab值为1,等于c值c5ab;/若a=3,b=2,c=1,则表达式值为0(假)。,36,1.4.4逻辑运算,关系运算符反映两个表达式之间的大小等于关系,逻辑运算符则用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式了。C51提供三种逻辑运算:逻辑与(&)逻辑或(|)逻辑非(!)逻辑表达式的一般形式为:逻辑与:条件式1&条件式2逻辑或:条件式1|条件式2逻辑非:!条件式,37,逻辑表达式的结合性为自左向右。逻辑表达式的值应该是一个逻辑值“真”或“假”,以0代表假,以1代表真。逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。逻辑表达式的运算结果不是0就是1,不可能是其它值。,38,C51逻辑运算符与算术运算符、关系运算符、赋值运算符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年厦门兴才职业技术学院单招职业倾向性考试题库附答案详解(预热题)
- 2026年厦门兴才职业技术学院单招职业技能考试题库及完整答案详解
- 共享决策在提升患者满意度的现状调查
- 2026年厦门华厦学院单招综合素质考试题库及参考答案详解一套
- 2026年厦门华厦学院单招职业倾向性测试题库含答案详解(培优a卷)
- 2026年厦门华厦学院单招职业技能测试题库及答案详解(历年真题)
- 2026年厦门华厦学院单招职业技能考试题库及答案详解(真题汇编)
- 2026年厦门华厦学院单招职业适应性测试题库及答案详解(名师系列)
- 2026年厦门华天涉外职业技术学院单招职业倾向性测试题库及答案详解1套
- 2026年厦门华天涉外职业技术学院单招职业倾向性考试题库及参考答案详解(新)
- 黄体破裂护理查房
- 2025年江西省上饶市中考一模英语试题(含答案无听力原文及音频)
- 地基买卖合同范本
- 产房安全核查表常用指南
- (高清版)DB11∕T 1831-2021 装配式建筑评价标准
- 小学语文部编版二年级下册第三单元 作业设计
- 2024年湖南省高考历史试卷真题(含答案解析)
- DZ∕T 0248-2014 岩石地球化学测量技术规程(正式版)
- 保险销售管理系统
- GB/T 17846-2024小艇电动舱底泵
- JC T 836-1998 玻璃纤维捻线机
评论
0/150
提交评论