80C51的C语言程序设计教学课件PPT单片机

上传人:ji****72 文档编号:25744567 上传时间:2017-12-17 格式:PPT 页数:58 大小:776KB
返回 下载 相关 举报
80C51的C语言程序设计教学课件PPT单片机_第1页
第1页 / 共58页
80C51的C语言程序设计教学课件PPT单片机_第2页
第2页 / 共58页
80C51的C语言程序设计教学课件PPT单片机_第3页
第3页 / 共58页
80C51的C语言程序设计教学课件PPT单片机_第4页
第4页 / 共58页
80C51的C语言程序设计教学课件PPT单片机_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《80C51的C语言程序设计教学课件PPT单片机》由会员分享,可在线阅读,更多相关《80C51的C语言程序设计教学课件PPT单片机(58页珍藏版)》请在金锄头文库上搜索。

1、9.2 C51的数据类型与运算,9.1 单片机的C语言,9.3 C51流程控制语句,9.4 C51的指针类型,9.5 C51的函数,9.6 C51编程实例,第9章 80C51的C语言程序设计,本章内容:,9.1.1 C51程序开发概述,一、采用C51的优点,编译器自动完成变量的存储分配 常用接口芯片编制通用驱动函数 常用功能模块和算法编制相应的函数,方便地进行算法和程序的移植。 当代码长度超过4KB以上时,C51比汇编语言更具有明显的优势。,9.1 单片机的C语言,二、C51程序开发过程,9.1.2 C51程序结构,预处理命令全局变量说明;函数1说明; 函数n说明;main() 局部变量说明;

2、 执行语句; 函数调用(实参表);,函数1(形式参数说明) 局部变量说明; 执行语句; 函数调用(实际参数表); 函数n(形式参数说明) 局部变量说明; 执行语句; 函数调用(实际参数表);,9.2 C51的数据类型与运算,9.2.1 C51的数据类型,9.2.2 C51的数据的存储器类型,变量和常量必须以一定的存储器类型定位于单片机的存储区域中。,经常使用的变量应置于片内RAM中,即用bdata、data、idata来定义; 不经常使用的变量或规模较大的变量应该置于片外RAM中,即用pdata、xdata来定义。例如:,bit bdata flags; /* 位变量flags定位在片内RAM

3、的位寻址区 */char data var; /* 字符变量var定位在片内RAM区 */float idata x,y,z; /* 实型变量x,y,z定位在片内间址RAM区 */sfr P1=0x90; /* 定义P1口地址为90H */,如果用户不对变量的存储器类型进行定义,C51编译器采用默认的存储器类型。由编译控制命令中的存储模式指令限制。例如:char var;/* 在SMALL模式时,var定位data存储区 */ /* 在COMPACT模式时,var定位pdata存储区 */ /* 在LARGE模式时,var定位xdata存储区 */,9.2.3 80C51硬件结构的C51定义,

4、一、特殊功能寄存器的定义 21个SFR,为能直接访问,C51用扩充的关键字sfr和sfr16进行定义。方法为: sfr 特殊功能寄存器名 = 地址常数;,例如:sfr SCON = 0x98;sfr P0 = 0x80; sfr16 T2 = 0xCC;,二、sfr特定位的定义 sbit定义可独立寻址访问的位变量,如定义SFR中的一些特定位。方法为:,1、sbit 位变量名 = sfr名位的位置(07),如: sfr PSW=0xD0; /* 定义PSW地址为0xD0 */ sbit OV=PSW2; /* 定义OV位为PSW.2 */ sbit CY=PSW7; /* 定义CY位为PSW.7

5、 */,2、sbit 位变量名 = 字节地址位的位置(07),如: sbit OV=0xD02; /* 定义OV位地址为0xD2 */ sbit CY=0xD07; /* 定义CY位地址为0xD7 */ 注:字节地址作基地址,必须在0x800xFF之间。,3、sbit 位变量名 = 位地址,如: sbit OV=0xD2; /* 定义OV位地址为0xD2 */ sbit CY=0xD7; /* 定义CY位地址为0xD7 */ 注:位地址必须位于0x800xFF之间。,三、内部RAM中可位寻址对象的定义 RAM的20H2FH单元可用bdata存储器类型访问,带有bdata类型的变量可以进行字或字

6、节寻址,用sbit指定bdata变量的相应位后就可以进行位寻址。,例如,先定义变量数据类型和存储类型为:int bdata ibase; /* 定义整形变量ibase */char bdata array4; /* 定义字符数组array4 */,定义可独立寻址访问的位:sbit mybit0 = ibase0; sbit mybit15 = ibase15;sbit ary07 = array07;sbit ary37 = array37;,访问示例:ibase = -1; /* 字寻址 */array2 = a;/* 字节寻址 */ary07 = 0; /* 位寻址 */用bit定义普通位

7、变量时C51编译器会自行安排该位变量于可位寻址的bdata区。例如,bit mybit。应注意的是,不能定义bit类型指针,也不能定义bit类型数组。,一、算术运算符和算术表达式1、基本算术运算符+ 加法运算符;- 减法(取负)运算符;* 乘法运算符;/ 除法运算符;% 取余(模)运算符。,9.2.4 C51的运算符和表达式,加、减和乘法符合一般的算术运算规则。 除法时,若是两个整数相除,其结果为整数,舍去小数部分;如果是两个浮点数相除,其结果为浮点数。 取余运算,则要求运算对象为整形。,求值要依运算符的优先级进行。算术运算符中取负运算优先级最高,其次为乘法、除法和取余。加法和减法优先级最低。

8、 可根据需要采用括号来改变运算符的优先级。,2、自增、自减运算符+ 自增运算符;- 自减运算符。,+和-运算符只能用于变量,不能用于常量和表达式。 如,+j表示先加1,再取值;j+表示先取值,再加1。自减运算类同。,3、类型转换运算符两侧的数据类型不同时,要转换成同种类型。方式有两种:,一是自动转换,是指编译器在编译时自动进行的类型转换。顺序为:bitcharintlongfloat,signedunsigned。 二是强制类型转换,如:(double)a ,将a 强制转换为double类型。,二、关系运算符和关系表达式,1、关系运算符 大于;= 大于等于;,= = 等于;!= 不等于。,高优

9、先级,低优先级,关系运算优先级低于算术运算,高于赋值运算。,2、关系表达式关系表达式的值为逻辑值:真和假。C51中用0表示假,用1表示真。,三、逻辑运算符和逻辑表达式,1、逻辑运算符& 逻辑与;| | 逻辑或;! 逻辑非。 在三种逻辑运算中,逻辑非的优先级最高,且高于算术运算符;逻辑或的优先级最低,低于关系运算符,但高于赋值运算符。,2、逻辑表达式逻辑表达式的值也为逻辑值:真和假。,四、位运算符C51提供6种位运算符:, 位取反; 右移;& 位与; 位异或;| 位或。,优先级顺序为:位取反、左移和右移、位与、位异或、位或。,五、赋值和复合赋值运算符 “=”称为赋值运算符,作用是将一个数据的值赋

10、给一个变量。 复合运算符如下:,+= 加法赋值;-= 减法赋值;*= 乘法赋值;/= 除法赋值;%= 取模赋值;,= 右移位赋值;&= 逻辑与赋值;|= 逻辑或赋值;= 逻辑异或赋值;= 逻辑非赋值。,一、条件语句由关键字if构成。有3种条件语句:1、if(条件表达式)语句若条件表达式的结果为真(非0值),则执行后面的语句;反之若条件表达式的结果为假(0值),则不执行后面的语句。例如:if(p1!= 0) c=20;,9.3 C51流程控制语句,9.3.1 C51选择语句,2、if(条件表达式)语句1 else 语句2若条件表达式的结果为真(非0值),则执行语句1;反之若条件表达式的结果为假(

11、0值),则执行语句2。,例如:if(p1!= 0) c=20;else c=0;,3、if(条件表达式1) 语句1 else if (条件表达式2)语句2else if (条件表达式3)语句3 else if (条件表达式n)语句nelse 语句n+1,此种形式的条件语句常用于实现多方向条件分支。,例如:if(a= 4) c=40;else if a= 3) c=30;else if a= 2) c=20;else if a= 1) c=10;else c=0;,二、开关语句开关语句主要用于多分支的场合。一般形式为:switch (表达式) case 常量表达式1:语句1;break; cas

12、e 常量表达式2:语句2;break; case 常量表达式n:语句n;break; default :语句n+1;,一、while语句一般形式为:while(条件表达式)语句;,9.3.2 C51循环语句,先检查条件,再决定是否执行后面的语句。如的结果一开始就为假,则后面的语句一次也不能执行。,二、do-while语句一般形式为:do语句while(条件表达式);,先执行循环语句,再检查条件表达式的结果。,三、for语句一般形式为: for(初值表达式;条件表达式;更新表达式)语句,先计算初值表达式,再检查条件表达式的结果。当满足条件时就执行循环体语句并计算更新表达式,然后再根据更新表达式的

13、计算结果来判断循环条件是否满足,一直进行到循环条件表达式的结果为假(0值)时退出循环体。,四、if语句与goto语句结合 利用if语句与goto语句的结合,可以构成循环结构。可以有两种形式:,1、当型循环形式为:loop:if(表达式) 语句 goto loop; ,2、直到型循环形式为:loop:语句 if(表达式) goto loop; ,变量的指针就是该变量的地址。为了表示指针变量和它所指向的变量地址间的关系,可以利用运算符:*(取内容)和&(取地址)。,9.4 C51的指针类型,一般定义形式为:变量 = * 指针变量指针变量 = & 目标变量 取内容运算是将指针变量所指向的目标变量的值

14、赋给左侧的变量;取地址运算是将目标变量的地址赋给左侧的变量。,指针变量中只能存放指针型数据(即地址),不要将一个非指针型的数据赋给一个指针变量。正确的赋值,例如:char data *p /* 定义指针变量 */p = 30H /* 为指针变量赋值 */,C51编译器支持两种指针类型:一般指针和基于存储器的指针。,定义指针变量时,若未指定它所指向的对象的存储器类型时,该指针变量就被认为是一般指针。 一般指针占用3个字节:第一个字节存放该指针的存储器类型编码(由编译模式的默认值确定),第二和第三个字节分别存放该指针的高位和低位地址偏移量。编码为:,9.4.1 一般指针,例如:xdata 类型,地址为0x1234的指针表示为:第一字节为0x01,第二字节为0x12,第三字节为0x34。,一般指针所指向对象的存储空间位置在运行期间才能确定,在编译时无法优化存储方式,必须生成一般代码以保证对任意空间的对象进行存取。因此一般指针所产生的代码速度较慢。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号