第4章80C51单片机C语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第4章80C51单片机C语言程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 C51 单片机 语言程序设计 课件
- 资源描述:
-
1、2022-6-81第第4 4章章 80C5180C51的的C C语言程序设计语言程序设计单片机单片机C语言概述语言概述4.1C51的的数据类型数据类型与运算与运算4.2C51流程流程控制语句控制语句4.3C51的的指针类型指针类型4.4C51的的函数函数4.5C51编程编程实例实例4.62022-6-8210.1 单片机单片机C语言概述语言概述 10.1.1 C5110.1.1 C51程序开发过程程序开发过程 编译器能自动完成变量的存储单元的分配编译器能自动完成变量的存储单元的分配 对常用功能模块和算法编制相应的函数,方便移植对常用功能模块和算法编制相应的函数,方便移植 采用采用C51C51的
2、优点的优点 C C语言具有良好的可读性、可移植性和基本的硬件操作能力语言具有良好的可读性、可移植性和基本的硬件操作能力 。 C51C51程序开发过程程序开发过程 编写源程序编写源程序 建立工程,加入源程序建立工程,加入源程序 编译生产目标程序编译生产目标程序 仿真调试、写存储器仿真调试、写存储器2022-6-832022-6-8410.2.1 C5110.2.1 C51的数据类型的数据类型10.2 C51的数据类型与运算的数据类型与运算 数据类型决定其数据类型决定其取值范围取值范围、占用、占用存储器的大小存储器的大小及可参与及可参与哪种运算。哪种运算。 数据类型数据类型长度长度(位位)取值范围
3、取值范围字符型字符型signed char8-128127unsigned char80255整整 型型signed int16-3276832767unsigned int16065535长整型长整型signed long32-2147488364821474883647unsigned long3204294967295浮点型浮点型float321.75494E-383.402823E+38位位 型型bit10,1sbit10,1访问访问SFRsfr80255sfr16160655352022-6-85尽可能采用无符号格式尽可能采用无符号格式bitbit用于定义位变量的名字,编译器会对其分
4、配用于定义位变量的名字,编译器会对其分配地址(地址(RAMRAM的的20H20H2FH 2FH 区域区域)sbitsbit用于定义位变量的名字和地址,地址是确定用于定义位变量的名字和地址,地址是确定的且不用编译器分配(的且不用编译器分配(SFRSFR及及RAMRAM的的20H20H2FH 2FH 区域区域)C51C51编译器在编译时会自动进行类型转换编译器在编译时会自动进行类型转换 几点说明:几点说明:2022-6-8610.2.2 C5110.2.2 C51数据的存储类型数据的存储类型C51C51的存储的存储器器类型类型存储器类型存储器类型长度(位)长度(位)对应单片机存储器对应单片机存储器
5、bdata1片内片内RAM位寻址区,共位寻址区,共128位。(亦能字节访问)位。(亦能字节访问)data8直接寻址,共直接寻址,共128字节。字节。idata8间接寻址,共间接寻址,共256字节。字节。pdata8片外片外 RAM分页间址,共分页间址,共256字节。(字节。(MOVX Ri)xdata16间接寻址,共间接寻址,共64k字节。(字节。(MOVX DPTR)code16ROM间接寻址,共间接寻址,共64k字节。(字节。(MOVC A,A+DPTR)2022-6-87经常使用的变量应该置于片内经常使用的变量应该置于片内RAMRAM中,要用中,要用bdatabdata、datadata
6、、idataidata来定义。来定义。不经常使用的变量或规模较大的变量应该置于片外不经常使用的变量或规模较大的变量应该置于片外RAMRAM中,中,要用要用pdatapdata、xdataxdata来定义。来定义。默认存储器类型由编译控制命令的存储模式指令限制。默认存储器类型由编译控制命令的存储模式指令限制。 存储模式存储模式默认默认存储类型存储类型特特 点点SMALL data 小模式。小模式。 变量默认在片内变量默认在片内RAM。空间小,速度块。空间小,速度块。COMPACTpdata紧凑模式。变量默认在片外紧凑模式。变量默认在片外RAM的页(的页(256字节,页号由字节,页号由P2口决定)
7、。口决定)。LARGExdata大模式。大模式。 变量默认在片外变量默认在片外RAM的的64KB范围。空间大,速度慢。范围。空间大,速度慢。2022-6-8810.2.3 80C5110.2.3 80C51硬件结构的硬件结构的C51C51定义定义特殊功能寄存器的声明特殊功能寄存器的声明 sfrsfr 特殊功能寄存器名特殊功能寄存器名 = = 地址常数;地址常数;格式:格式:例如:例如:sfr SCON = 0 x90sfr SCON = 0 x90;sfr P0 = 0 x80sfr P0 = 0 x80; 2022-6-89特殊功能寄存器中特殊功能寄存器中特定位特定位的声明的声明 sbit
8、sbit 位变量名位变量名= =特殊功能寄存器名特殊功能寄存器名 位的位置(位的位置(0 07 7) 例如:例如: sfr PSW=0 xD0sfr PSW=0 xD0; sbit OV=PSW2 sbit OV=PSW2; sbit sbit 位变量名位变量名 = = 字节地址字节地址 位的位置(位的位置(0 07 7) 例如:例如: sbit OV=0 xD02sbit OV=0 xD02; sbit CY=0 xD07 sbit CY=0 xD07; sbit sbit 位变量名位变量名 = = 位地址位地址 例如:例如: sbit OV=0 xD2sbit OV=0 xD2; sbit
9、 CY=0 xD7 sbit CY=0 xD7; 2022-6-810内部内部RAMRAM中可位寻址对象的定义中可位寻址对象的定义 先先定义变量的数据类型和存储类型定义变量的数据类型和存储类型 例如:例如: int bdata ibaseint bdata ibase; char bdata array4 char bdata array4; 再再利用利用sbitsbit进行声明进行声明 例如:例如: sbit mybit0 = ibase0sbit mybit0 = ibase0; sbit mybit15 = ibase15 sbit mybit15 = ibase15; sbit ary
10、07 = array07sbit ary07 = array07; 访问示例:访问示例:ibase = -1ibase = -1;array2 = array2 = a a; 2022-6-811算术运算符和算术表达式算术运算符和算术表达式 10.2.4 C5110.2.4 C51的运算符和表达式的运算符和表达式 基本算术运算符基本算术运算符 例如:例如: + + 加法运算符;加法运算符; - - 减法(取负)运算符;减法(取负)运算符; * * 乘法运算符;乘法运算符; / / 除法运算符;除法运算符; % % 取余数运算符取余数运算符。 示例:示例:25.0/20.0=1.25 25.0/
11、20.0=1.25 25/20=125/20=125%20=5 25%20=5 取负运算优先级最高。取负运算优先级最高。 2022-6-812自增、自减运算符(自增、自减运算符(仅能用于变量仅能用于变量) 例如:例如: + + 自增运算符;自增运算符; - - 自减运算符;自减运算符;类型转换运算符类型转换运算符 自动转换,顺序:自动转换,顺序:bitcharintlongfloatbitcharintlongfloat 强制类型转换,如:(强制类型转换,如:(doubledouble)a a 2022-6-813关系运算符关系运算符和和关系表达式关系表达式 关系运算符关系运算符 小于;小于;
12、 = 大于;大于; = = 大于等于;大于等于; = = = = 等于;等于; != = 不等于。不等于。关系表达式关系表达式关系表达式的值为逻辑值:真(关系表达式的值为逻辑值:真(1 1)和假()和假(0 0)2022-6-814逻辑运算符逻辑运算符和和逻辑表达式逻辑表达式 逻辑运算符逻辑运算符 & & 逻辑与逻辑与 | | 逻辑或逻辑或 ! 逻辑非逻辑非 逻辑表达式逻辑表达式逻辑表达式的值为逻辑值:真(逻辑表达式的值为逻辑值:真(1 1)和假()和假(0 0)例:例:5| | 05| | 0结果为结果为1 1,2&02&0结果为结果为0 0 2022-6-815位运算符位运算符 & & 按
13、位与按位与 | | 按位或按位或 按位异或按位异或 按位取反按位取反 右移右移 例:例:P1=P11P1=P11表示对表示对P1P1口的所有位左移口的所有位左移1 1位位 2022-6-816赋值和复合赋值运算符赋值和复合赋值运算符 复合赋值运算符复合赋值运算符 += += 加法赋值;加法赋值; -= -= 减法赋值;减法赋值; * *= = 乘法赋值;乘法赋值; /= /= 除法赋值;除法赋值; %= %= 取模赋值;取模赋值; 符号符号“= =”称为赋值运算称为赋值运算符符 = = = 右移位赋值;右移位赋值; &= &= 逻辑与赋值;逻辑与赋值; |= |= 逻辑或赋值;逻辑或赋值; =
14、 = 逻辑异或赋值;逻辑异或赋值; = = 逻辑非赋值逻辑非赋值 例:例:a a* *=5=5相当于相当于a=aa=a* *5 5;b&=0 x80b&=0 x80相当于相当于b=b&0 x80b=b&0 x80。2022-6-81710.3 C51流程控制语句流程控制语句 10.3.1 C5110.3.1 C51选择语句选择语句 条件语句条件语句ifif(条件表达式)语句(条件表达式)语句 例如:例如: if if(p1p1!= 0= 0) c=20 c=20; ifif(条件表达式)语句(条件表达式)语句1 1 else else 语句语句2 2 例如:例如: if if(p1p1!= 0
15、= 0) c=20 c=20; else c=0 else c=0; 2022-6-818ifif(条件表达式(条件表达式1 1)语句)语句1 1 else if else if (条件表达式(条件表达式2 2)语句)语句2 2 else if else if (条件表达式(条件表达式3 3)语句)语句3 3 else if else if (条件表达式(条件表达式n n)语句)语句n n else else 语句语句n+1 n+1 2022-6-819开关语句开关语句switch switch (表达式)(表达式) case case 常量表达式常量表达式1 1:语句:语句1 1;break
16、break; case case 常量表达式常量表达式2 2:语句:语句2 2;breakbreak; case case 常量表达式常量表达式n n:语句:语句n n;breakbreak; default default :语句:语句n+1n+1; 2022-6-82010.3.2 C5110.3.2 C51循环语句循环语句 whilewhile语句语句 一般形式为:一般形式为: whilewhile(条件表达式)语句;(条件表达式)语句;如果条件表达式的结果一开始就为假,则后面的语句一如果条件表达式的结果一开始就为假,则后面的语句一次也不能执行。次也不能执行。 Do - whileDo
17、- while语句语句 一般形式为:一般形式为: dodo语句语句 whilewhile(条件表达式);(条件表达式);任何条件下,循环体语句至少会被执行一次。任何条件下,循环体语句至少会被执行一次。 2022-6-821forfor语句语句一般形式为:一般形式为:forfor( 初值表达式初值表达式;条件表达式条件表达式;更新表达式更新表达式 )语句)语句ifif语句与语句与gotogoto语句结合语句结合 当型循环当型循环 形式为:形式为: looploop:ifif(表达式)(表达式) 语句语句 goto loopgoto loop; 2022-6-822直到型循环直到型循环 形式为:形
18、式为: looploop: 语句语句 ifif(表达式)(表达式) goto loopgoto loop; continuecontinue是一种循环中断语句,它并不跳出循环体;是一种循环中断语句,它并不跳出循环体;breakbreak语句只能跳出它所处的那一层循环;语句只能跳出它所处的那一层循环;gotogoto语句可以用于跳出多重循环(从内层到外层)。语句可以用于跳出多重循环(从内层到外层)。注意:注意:2022-6-82310.4 C51的指针类型的指针类型 有一个变量有一个变量a a,利用,利用&a&a表示变量表示变量a a的地址的地址 。则语句。则语句 p=&a p=&a; 把把a
19、a的地址赋给了指针变量的地址赋给了指针变量p p,则,则“p p指向了变量指向了变量a a”。 * *P P表示变量表示变量a a的内容的内容 指针变量的定义指针变量的定义 char data char data * *p /p /* * 定义指针变量定义指针变量 * */ / p = 30H / p = 30H /* * 为指针变量赋值,为指针变量赋值,30H30H为片内为片内RAMRAM地址地址 * */ / x = x = * *p /p /* * 30H 30H单元的内容送给变量单元的内容送给变量x x * */ /2022-6-824定义时定义时未指定未指定它所指向的它所指向的对象的
20、存储器对象的存储器类型类型 10.4.1 10.4.1 一般指针一般指针 一般指针占一般指针占3 3个字节个字节第一字节存放该指针的第一字节存放该指针的默认默认存储器类型编码(存储器类型编码(见表见表)第二字节存放该指针的第二字节存放该指针的高高位地址偏移量位地址偏移量第三字节存放该指针的第三字节存放该指针的低低位地址偏移量位地址偏移量 存储器类型编码存储器类型编码 存储器类型存储器类型bdata/ data / idataxdatapdatacode编码编码0 x000 x010 xfe0 xff2022-6-825一般指针定义示例:一般指针定义示例:charchar * *xdata st
21、rptrxdata strptr; / /* * 指针本身存于指针本身存于xdata xdata 空间,它指向空间,它指向charchar型数据型数据 * */ /intint * *data numberdata number; / /* * 指针本身存于指针本身存于data data 空间,它指向空间,它指向intint型数据型数据 * */ / 由于指向对象的存储空间在编译时无法确定(由于指向对象的存储空间在编译时无法确定(运行时确定运行时确定),),因此必须生成一般代码以保证对任意空间的对象进行存取。所因此必须生成一般代码以保证对任意空间的对象进行存取。所以以一般指针所产生的代码速度较
22、慢一般指针所产生的代码速度较慢。2022-6-82610.4.2 10.4.2 基于存储器的指针基于存储器的指针定义时就定义时就指定指定它所指向的它所指向的对象的存储器对象的存储器类型类型 指针占指针占1 1个字节(个字节(idata idata * *,data data * *,pdata pdata * *)或)或2 2个个字节(字节(code code * *,xdata xdata * *) 基于存储器指针定义示例:基于存储器指针定义示例:charchar data data * *strstr; / /* * 指针指向的指针指向的charchar型数据存于型数据存于data dat
展开阅读全文