预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共78页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

单片机C51语言基础及C51程序设计主要内容:一、C51语言概述二、C51的标识符与关键字关键字ifKeilC51编译器除了有ANSIC标准的32个关键字外,还根据51单片机的特点扩展了相应的关键字。在KeilC51开发环境的文本编辑器中编写C程序,系统可以把保留字以不同的颜色显示,缺省颜色为蓝色。下表为KeilC51编译器扩展的关键字。1.C51的变量【存储类别】数据类型【存储器类型】变量名【存储类别】数据类型【存储器类型】变量名数据的不同格式叫做数据类型C51扩充数据类型:bit、sfr或sfr16、sbitsfr或sfr16型例如,sfrP0=0x80;//定义P0口地址80H sfrPCON=0x87;//定义PCON地址87H sfr16DPTR=0x82;//定义DPTR的低端地址82Hsbit型1)将SFR的绝对位地址定义为位变量名 sbitbit_name=位地址常数; 例如,sbitCY=0xD7;C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。应用举例:【存储类别】数据类型【存储器类型】变量名建立C51存储类型与存储空间的对应关系C51的存储类型与存储空间对应关系表三种编译模式分别对应于三种缺省存储类型:变量名可以由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。unsignedchardatasystem_status=0;unsignedcharbdatastatus_byte;2.C51的指针在C51里定义指针,需要额外说明两个问题: 1)指针变量自身位于哪个存储区域? 2)被指向变量位于哪个存储区中?例1 charxdataa=‘A’; char*ptr=&a;例2 charxdataa=‘A’; char*ptr=&a; charidatab=‘B’; *ptr=&b;例3 charxdataa=‘A’; charxdata*ptr=&a;例4 charxdataa=‘A’; charxdata*idataptr=&a;四、C51的运算符及表达式C语言规定了算术运算符的优先级和结合性。 优先级---指当运算对象两侧都有运算符时,执行运算的先后次序。按运算符优先级别的高低顺序执行运算。 结合性---指当一个运算对象两侧的运算符优先级别相同时的运算顺序。 算术运算符中取负运算的优先级最高,其次是乘法、除法和取余,加法和减法的优先级最低。也可以根据需要,在算术表达式采用括号来改变优先级的顺序。 如:a+b/c;该表达式中,除号优先级高于加号,故先运算b/c所得结果,之后再与a相加。 (a+b)*(c-d)-e;该表达式中,括号优先级最高,其次是“*”,最后是减号。故先运算(a+b)和(c-d),然后再将二者结果相乘,最后与e相减。(2)、自增减运算符 自增减运算符的作用是使变量值自动加1或减1。 ++自增运算符; --自减运算符; ++和--运算符只能用于变量,不能用于常量和表达式。如++(a+1)是错误的。 如:++i、--i在使用i之前,先使i值加(减)1。 i++、i--在使用i之后,再使i值加(减)1。 粗略的看,++i和i++的作用都相当于i=i+1,但++i和i++的不同之处在于++i先执行i=i+1,再使用i的值;而i++则是先使用i的值,再执行i=i+1。 如:若i值原来为5.则 j=++i;j的值为6,i的值也为6; j=i++;j的值为5,i的值为6;(3)、类型转换 运算符两侧的数据类型不同时,要转换成同种类型。转换的方法有两种,一是自动转换,是编译系统在编译时自动进行的类型转换,顺序是: bit→char→int→long→float,signed→unsigned。 二是强制类型转换,是通过类型转换运算来实现的。 其一般形式:(类型说明符)(表达式) 功能:把表达式的运算结果强制转换成类型说明符所表示的类型。 如:(double)a将a强制转换成double类型 (int)(x+y)将x+y值强制转换成int类型 (float)(5%3)将模运算5%3的值强制转换成float类型。2关系运算符、关系表达式及优先级 (1)、C51提供六种关系运算符 ﹤小于; ﹤=小于等于; ﹥大于; ﹥=大于等于 ==测试等于; ==!=测试不等于; (2)、关系运算符的优先级 1)<、>、<=、>=的优先级相同,两种==、==相同;前4种优先级高于后两种。 2)关系运算符的优先级低于算术运算符。 3)关系运算符的优先级高于赋值运算符。 如:c>a+b等效于c>(a+b);a>b!=c等效于(a>b)!=c a=b>c等效于a=(b>c) (3)、关系运算符的结合性为左结合 如:a=4,b=3,c=1,则f=a>b>