80C51的C语言程序设计教学课件PPT单片机.ppt
《80C51的C语言程序设计教学课件PPT单片机.ppt》由会员分享,可在线阅读,更多相关《80C51的C语言程序设计教学课件PPT单片机.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定位
3、在片内RAM的位寻址区 */ 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硬
4、件结构的C51定义,一、特殊功能寄存器的定义 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; /*
5、 定义CY位为PSW.7 */,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
7、; /* 位寻址 */ 用bit定义普通位变量时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(条件
11、表达式)语句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,此种形式的条件语句常用于实现多方向条件分支。,例如: 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;,二、
12、开关语句 开关语句主要用于多分支的场合。一般形式为: switch (表达式) case 常量表达式1:语句1;break; case 常量表达式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; ,变量的指针就是该变量的地址。为了表示指针变量和它所指向的变量地址间的关系,可以利用运算符:*(取内容)
14、和&(取地址)。,9.4 C51的指针类型,一般定义形式为: 变量 = * 指针变量 指针变量 = & 目标变量 取内容运算是将指针变量所指向的目标变量的值赋给左侧的变量;取地址运算是将目标变量的地址赋给左侧的变量。,指针变量中只能存放指针型数据(即地址),不要将一个非指针型的数据赋给一个指针变量。正确的赋值,例如: char data *p /* 定义指针变量 */ p = 30H /* 为指针变量赋值 */,C51编译器支持两种指针类型:一般指针和基于存储器的指针。,定义指针变量时,若未指定它所指向的对象的存储器类型时,该指针变量就被认为是一般指针。 一般指针占用3个字节:第一个字节存放该
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 C51 语言程序设计 教学 课件 PPT 单片机
链接地址:https://www.31doc.com/p-3817094.html