80C51单片机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

signed int
整 型 unsigned int signed long 长整型 unsigned long 浮点型 位 型 访问SFR float bit sbit sfr sfr16
16
16 32 32 32 1 1 8 16
-32768~32767
0~65535 -21474883648~21474883647 0~4294967295 ±1.75494E-38~±3.402823E+38 0,1 0,1 0~255 0~65535
bit bdata flags; /* 位变量flags定位在片内RAM的位寻址区 */ char data var; /* 字符变量var定位在片内RAM区 */ float idata x,y,z; /* 实型变量x,y,z定位在片内间址RAM区 */ sfr P1=0x90; /* 定义P1口地址为90H */
sfr SCON = 0x90;/*定义串行口控制寄存器,地址为0x90 */ sfr P0 = 0x80; /*定义P0口,地址为0x80 */ sfr16 T2 = 0xCC;/*定义80C52的T2L地址为0xCC,T2H地址为0xCD*/
二、特殊功能寄存器中特定位的定义 在C51中利用关键字sbit定义可独立寻址访问的位变 量,如定义80C51单片机SFR中的一些特定位。定 义方法分别为: 1、sbit 位变量名 = 特殊功能寄存器名^位的位置 (0~7),如: sfr PSW=0xD0; /* 定义PSW寄存器地址为0xD0 */ sbit OV=PSW^2; /* 定义OV位为PSW.2,地址 为0xD2 */ sbit CY=PSW^7; /* 定义CY位为PSW.7,地址为 0xD7 */http://www.gangban-cn.com
三、逻辑运算符和逻辑表达式 1、逻辑运算符 && 逻辑与; | | 逻辑或; ! 逻辑非。 在三种逻辑运算中,逻辑非的优先级最高,且 高于算术运算符;逻辑或的优先级最低,低于关系 运算符,但高于赋值运算符。
2、逻辑表达式 逻辑表达式的值也为逻辑值:真和假。 http://www.gangban-cn.com
9.2.4 C51的运算符和表达式
一、算术运算符和算术表达式 1、基本算术运算符 + 加法运算符; 减法(取负)运算符; * 乘法运算符; / 除法运算符; % 取余(模)运算符。 http://www.gangban-cn.com
在这些运算符中,加、减和乘法符合一般的算术 运算规则。除法运算时,如果是两个整数相除,其结 果为整数,舍去小数部分;如果是两个浮点数相除, 其结果为浮点数。而对于取余运算,则要求两个运算 对象均为整形数据。 求一个算术运算表达式的值时,要依运算符的优 先级进行。算术运算符中取负运算优先级最高,其次 为乘法、除法和取余,加法和减法优先级最低。也可 以根据需要,在算术表达式中采用括号来改变运算符 的优先级。
+= -= *= /=
加法赋值; 减法赋值; 乘法赋值; 除法赋值;
%= 取模赋值; <<= 左移位赋值; >>= 右移位赋值; &= 逻辑与赋值; |= 逻辑或赋值; ^= 逻辑异或赋值; ~= 逻辑非赋值。
9.3 C51流程控制语句
9.3.1 C51选择语句 一、条件语句 条件语句由关键字if构成。有3种条件语句: 1、if(条件表达式)语句 若条件表达式的结果为真(非0值),则执行后面的 语句;反之若条件表达式的结果为假(0值),则不 执行后面的语句。 例如: if(p1!= 0){ c=20;}
bit→char→int→long→float,signed→unsigned。
二是强制类型转换,如:(double)a , 将a 强制转换为double类型。
二、关系运算符和关系表达式 1、关系运算符 < 小于; <= 小于等于; > 大于; >= 大于等于; = = 等于; != 不等于。
关系运算即比较运算。其优先级低于 算术运算,高于赋值运算。在以上6种关系 运算中,前4种优先级相同,处于高优先级; 后2种优先级相同,处于低优先级。 2、关系表达式 关系表达式的值为逻辑值:真和假。C51中 用0表示假,用1表示真。
9.2.2
C51的数据的存储器类型
应用程序中使用的任何数据(Biblioteka Baidu量和常量)必须以 一定的存储器类型定位于单片机的相应的存储区域中。
存储器类型 长度(位) 对应单片机存储器
bdata
data
1
8
片内RAM,位寻址区,共128位。(亦能字节访问)
片内RAM,直接寻址,共128字节。
idata
pdata
8
然后,利用sbit定义可独立寻址访问的对 象位:
sbit mybit0 = ibase^0; /* mybit0定义为ibase的第0 位 */ sbit mybit15 = ibase^15;/* mybit15定义为ibase的第 15位 */ sbit ary07 = array[0]^7; /* ary07定义为ary[0]的第7 位 */ sbit ary37 = array[3]^7; /* ary37定义为ary[3]的第7 位 */
存储模式 SMALL COMPACT LARGE 默认存储类型 data pdata xdata 特 点
直接访问片内RAM;栈在片内RAM中。 用R0和R1间址片外分页RAM;栈在片内RAM中。 用DPTR间址片外RAM,代码长,效率低。
9.2.3 80C51硬件结构的C51定义
一、特殊功能寄存器的定义 80C51单片机内部有21个特殊功能寄存器,为了对它们 能够进行直接访问,C51编译器利用扩充的关键字sfr和sfr16对 这些特殊功能寄存器进行定义。sfr的定义方法为: sfr 特殊功能寄存器名 = 地址常数; 例如:
此种形式的条件语句常用于实现多方 向条件分支。
例如: if(a>= 1){ c=10;} else if { a>= 2){ c=20;} else if { a>= 3){ c=30;} else if { a>= 4){ c=40;} else { c=0;}
二、开关语句
开关语句主要用于多分支的场合。一般形式为: switch (表达式) { case 常量表达式1:语句1;break; case 常量表达式2:语句2;break; …… case 常量表达式n:语句n;break; default :语句n+1; } 开关语句执行时,将switch后面表达式的值与case后面 各个常量表达式的值逐个进行比较,若匹配则执行相应case 后面的语句,然后执行break语句。break语句的功能是中止 当前语句的执行,使程序跳出switch语句。若没有匹配的情 况,则执行语句n+1。http://www.gangban-cn.com
2、sbit 位变量名 = 字节地址^位的位置(0~7),如: sbit OV=0xD0^2; /* 定义OV位地址为0xD2 */ sbit CY=0xD0^7; /* 定义CY位地址为0xD7 */ 注:字节地址作为基地址,必须位于0x80~0xFF之 间。 3、sbit 位变量名 = 位地址,如: sbit OV=0xD2; /* 定义OV位地址为0xD2 */ sbit CY=0xD7; /* 定义CY位地址为0xD7 */ 注:位地址必须位于0x80~0xFF之间。
本章共六节,主要介绍:
9.1 单片机的C语言 9.2 C51的数据类型与运算 9.3 C51流程控制语句 9.4 C51的指针类型 9.5 C51的函数 9.6 C51编程实例
9.1 单片机的C语言
9.1.1 C51程序开发概述 一、采用C51的优点
编译器能自动完成变量的存储单元的分配,编程者可 以专注于应用软件的设计,可以对常用的接口芯片编制通 用的驱动函数,对常用的功能模块和算法编制相应的函数, 可以方便地进行信号处理算法和程序的移植,从而加快单 片机应用系统的开发速度。 当代码长度超过4KB以上时,C51比汇编语言更具有 明显的优势。
访问示例: ibase = -1; /* 字寻址 */ array[2] = „a‟;/* 字节寻址 */ ary07 = 0; /* 位寻址 */ 用关键字bit定义普通位变量时C51编译器会 自行安排该位变量于可位寻址的bdata区。例 如,bit mybit。 应注意的是,不能定义bit类型指针,也不能 定义bit类型数组。
四、位运算符 C51提供6种位运算符:
& 位与; | 位或; ^ 位异或; ~ 位取反; << 左移; >> 右移。 位运算的优先级顺序为:位取反、左移和右 移、位与、位异或、位或。
五、赋值和复合赋值运算符 符号“=”称为赋值运算符,其作用是将一个数 据的值赋给一个变量。赋值表达式的值就是被赋值 变量的值。 在赋值运算符的前面加上其它运算符可以构成 复合赋值运算符。在C51中共有10种复合运算符:
二、C51程序开发过程
C51源程序
C51编译器
浮动目标码模块
列表文件 用户库
系统库 连接器
绝对定位目标码文件
映像文件
EPROM编程器
硬件仿真器
9.1.2
C51程序结构
函数1(形式参数说明) { 局部变量说明; 执行语句; 函数调用(实际参数表); } …… …… 函数n(形式参数说明) { 局部变量说明; 执行语句; 函数调用(实际参数表); }
2、自增、自减运算符 ++ 自增运算符; -- 自减运算符。 ++和--运算符只能用于变量,不能用于常 量和表达式。如,++j表示先加1,再取值; j++表示先取值,再加1。自减运算类同。
3、类型转换 运算符两侧的数据类型不同时,要转换成同种 类型。转换方式有两种情况:
一是自动转换,是指编译器在编译时自 动进行的类型转换。顺序为:
三、内部RAM中可位寻址对象的定义
当位对象位于80C51单片机内部RAM的 20H~2FH单元时,可以利用C51编译器提供的bdata 存储器类型进行访问,带有bdata类型的变量可以进 行字或字节寻址,用sbit指定bdata变量的相应位后 就可以进行位寻址。 例如,先定义变量的数据类型和存储类型为: int bdata ibase; /* 在位寻址区定义一个整形变量 ibase */ char bdata array[4]; /* 在位寻址区定义一个字符 数组array[4] */
8
片内RAM,间接寻址,共256字节。
片外RAM,分页间址,共256字节。(MOVX @Ri)
xdata
code
16
16
片外RAM,间接寻址,共64k字节。(MOVX @DPTR)
ROM区域,间接寻址,共64k字节。(MOVC @DPTR)
访问片内RAM比访问片外RAM的速度要 快得多,所以对于经常使用的变量应该置于片 内RAM中,即用bdata、data、idata来定义; 对于不经常使用的变量或规模较大的变量应该 置于片外RAM中,即用pdata、xdata来定义。 例如:
如果用户不对变量的存储器类型进行定义,C51编译器 采用默认的存储器类型。默认的存储器类型由编译控制命令 中的存储模式指令限制。例如: char var;/* 在SMALL模式时,var定位data存储区 */ /* 在COMPACT模式时,var定位pdata存储区 */ /* 在LARGE模式时,var定位xdata存储区 */
预处理命令 全局变量说明; 函数1说明; …… …… 函数n说明;
main() { 局部变量说明; 执行语句; 函数调用(实际参数表);
}
9.2 C51的数据类型与运算
9.2.1
数据类型
signed char
C51的数据类型
长度(位)
8 8
取值范围
-128~127 0~255
字符型
unsigned char
2、if(条件表达式)语句1 else 语句2 若条件表达式的结果为真(非0值),则执行 语句1;反之若条件表达式的结果为假(0值), 则执行语句2。 例如: if(p1!= 0){ c=20;} else { c=0;}
3、if(条件表达式1)语句1 else if (条件表达式2)语句2 else if (条件表达式3)语句3 …… else if (条件表达式n)语句n else 语句n+1
相关文档
最新文档