第四章C51程序设计语言课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第四章C51程序设计语言课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 C51 程序设计语言 课件
- 资源描述:
-
1、第四章第四章 4-3 C51的头文件与库函数的头文件与库函数4-5 C51的应用技巧的应用技巧随着随着80C5180C51单片机硬件性能的提升,尤其是片内程单片机硬件性能的提升,尤其是片内程序存储器容量的增大和时钟工作频率的提高,已基本序存储器容量的增大和时钟工作频率的提高,已基本克服了高级语言产生代码长、运行速度慢、不适合单克服了高级语言产生代码长、运行速度慢、不适合单片机使用的致命缺点。由此片机使用的致命缺点。由此C51C51已经得到广泛的推广和已经得到广泛的推广和应用。应用。采用采用C51C51程序设计语言,编程者只需了解变量和常程序设计语言,编程者只需了解变量和常量的存储类型与量的存储
2、类型与80C5180C51单片机存储空间的对应关系,而单片机存储空间的对应关系,而不必深入了解单片机的硬件和接口。不必深入了解单片机的硬件和接口。C51C51编译器会自动编译器会自动完成变量的存储单元的分配。完成变量的存储单元的分配。4.1.1 C51语言概述语言概述#include /*文件包含,文件包含,51寄存器说明寄存器说明*/main()/*主函数主函数*/int x,y,z;/*变量定义变量定义*/if(xy)z=x;/*比较大小,求最大值比较大小,求最大值*/else z=y;C51程序示例:程序示例:C语言编程与汇编语言编程相比的优势语言编程与汇编语言编程相比的优势1)与硬件无
3、关性较高,对编程者硬件基础要求较低。可)与硬件无关性较高,对编程者硬件基础要求较低。可移植性好移植性好。2)容易理解和掌握,完全模块化,有各种函数库,大量)容易理解和掌握,完全模块化,有各种函数库,大量库函数可用,编程效率高,代码复用率高。库函数可用,编程效率高,代码复用率高。3)与其它高级语言相比,生成的代码质量高,执行速度)与其它高级语言相比,生成的代码质量高,执行速度较快,对硬件的操控能力强。较快,对硬件的操控能力强。4)有完善的编程和调试工具,灵活方便,便于项目维护)有完善的编程和调试工具,灵活方便,便于项目维护管理管理。缺点:缺点:1)对于代码执行时间不能精确掌控,所以)对于代码执行
4、时间不能精确掌控,所以对于时序有严对于时序有严格要求的情况,最好采用汇编语言格要求的情况,最好采用汇编语言。2)在大量使用)在大量使用data区域的内存变量时,容易产生区域的内存变量时,容易产生堆栈溢堆栈溢出出,从而产生不可预测的错误。,从而产生不可预测的错误。2)与汇编语言编程相比,代码规模和速度还有差距与汇编语言编程相比,代码规模和速度还有差距。4.1.2 C51的标识符、常量和关键字的标识符、常量和关键字标识符标识符用来标识源程序中某个对象的名字,这些对象用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。可以是语句、数据类型、函数、变量、数组等。标识符标识
5、符区分大小写区分大小写,第一个字符必须是字母第一个字符必须是字母或下划线。或下划线。C51中有些库函数的标识符是以下划线开头的,所以中有些库函数的标识符是以下划线开头的,所以一般不要以下划线开头命名标识符一般不要以下划线开头命名标识符。常量常量:凡以数字:凡以数字0开头的数字序列,一律作为开头的数字序列,一律作为八进制数八进制数处理;凡处理;凡以以0 x开头开头,后面跟若干数字的,一律作为,后面跟若干数字的,一律作为十六进十六进制数制数处理;其它作为处理;其它作为十进制数十进制数处理。处理。关键字关键字:ANSI C标准关键字和标准关键字和C51编译器的扩展关键编译器的扩展关键字一览表见主教材
6、字一览表见主教材145-147页。页。例如:例如:unsigned char code Flag=0 x0f;就是声明一个无符号的就是声明一个无符号的char型变量型变量Flag,并给他赋初值,并给他赋初值为为0 x0f;并且声明他所在的存储空间在片内统一编址的;并且声明他所在的存储空间在片内统一编址的ROM中。中。声明中,如果没有修饰符,则数据默认的存储空间为声明中,如果没有修饰符,则数据默认的存储空间为data型,也就是在片内型,也就是在片内RAM中。中。C51的数据声明的一般格式如下的数据声明的一般格式如下类型说明符类型说明符修饰符修饰符 标识符标识符=初值初值4.1.3 C514.1.
7、3 C51的数据类型的数据类型C C语言中的基本数据类型语言中的基本数据类型类型类型符号符号关键字关键字数的数的取值取值范围范围所占位数所占位数整型整型字符型字符型实型实型有有无无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned long intunsigned short int16065535有有float323.4e-383.4e38有有double有有char8-128127无无uns
8、igned char80255指针型指针型*1B3B对象的地址对象的地址C C5151的数据类型扩充定义的数据类型扩充定义例:例:sfr P1=0 x90;sfr16 T2=0 xCC;sbit OV=PSW2;sbit P10=0 x900;或或 sbit P10=P10;类型类型关键字关键字所占位数所占位数数的表示范围数的表示范围特殊功能寄存器声明特殊功能寄存器声明sfr1B(16bit)025516位特殊功能寄存器声明位特殊功能寄存器声明sfr162B(32bit)065535位变量数据声明位变量数据声明bit1bit0或或1可寻址位(特殊功能位)声明可寻址位(特殊功能位)声明sbit1
9、bit0或或1 对对C51编译器来说,编译器来说,short和和int是相同类型,是相同类型,double和和float是同一类型;是同一类型;低地址存高字节,高地址存低字节;低地址存高字节,高地址存低字节;有符号数符号位在最低字节的最高位;有符号数符号位在最低字节的最高位;C51编译器能识别的数据类型编译器能识别的数据类型数数 据据 类类 型型长长 度度取值范围取值范围unsigned char1B0255char1B-128+127unsigned int2B065535int2B-32768+32767unsigned long4B04294967295long4B-2147483648
10、+2147483647float4B 1.175494E-38 3.402823E+38*1B3B对象的地址对象的地址bit位位0或或1sfr1B0255sfr162B065535sbit位位0或或1数组类型:数组类型:数组是一组数据,其中的每一个数据元素都属于同一数组是一组数据,其中的每一个数据元素都属于同一类型,类型,各元素可以用数组名和下标来唯一确定各元素可以用数组名和下标来唯一确定。定义格式类。定义格式类似于数据定义:似于数据定义:数据类型数据类型 数组名数组名常量表达式常量表达式多维数组的定义:多维数组的定义:数据类型数据类型 数组名数组名常量表达式常量表达式 常量表达式常量表达式
11、例:例:int xdata xx 15;char code str=“How are you?”;指针类型:指针类型:在在C语言中为了能够实现直接对内存单元进行操作,引语言中为了能够实现直接对内存单元进行操作,引入了指针类型的数据。指针是专门用来确定其它数据类型的入了指针类型的数据。指针是专门用来确定其它数据类型的地址的。因此,地址的。因此,一个变量的地址被称为该变量的指针一个变量的地址被称为该变量的指针。指针。指针变量的定义格式为:变量的定义格式为:数据类型数据类型 存储器类型存储器类型 *标识符标识符例如:例如:“&a”为变量为变量a的地址;的地址;“*p”为指针变量所指向的变量。为指针变
12、量所指向的变量。其中,其中,“标识符标识符”为所定义的指针变量名;为所定义的指针变量名;“数据类数据类型型”说明该指针变量所指向的变量的类型。说明该指针变量所指向的变量的类型。指针变量的引用:指针有关的运算符有两个:地址运指针变量的引用:指针有关的运算符有两个:地址运算符算符“&”和间接访问运算符和间接访问运算符“*”。用用typedeftypedef重新定义数据类型的名称重新定义数据类型的名称在在C语言中为了简化输入,可以根据自己的需语言中为了简化输入,可以根据自己的需要,对前面介绍的数据类型重新定义。格式为:要,对前面介绍的数据类型重新定义。格式为:例如:例如:typedef unsing
13、ed char uchar;即在之后的程序中都可以用即在之后的程序中都可以用uchar 代表代表unsinged char 。typedef unsinged long ulong;即在之后的程序中都可以用即在之后的程序中都可以用ulong 代表代表unsinged longtypedef 已有数据类型已有数据类型 新的数据类型新的数据类型4.1.4 变量的存储种类(属性)变量的存储种类(属性)变量是一种在程序执行过程中,其数值不断变变量是一种在程序执行过程中,其数值不断变化的量。同化的量。同ANSI C一样,一样,C51规定变量必须先定义规定变量必须先定义后使用。后使用。C51对变量的进行定
14、义的格式如下:对变量的进行定义的格式如下:存储种类存储种类 数据类型数据类型 存储器类型存储器类型 变量名表变量名表其中,存储种类(属性)和存储器类型是可选其中,存储种类(属性)和存储器类型是可选项。项。存储种类是指变量在程序执行过程中的作用范存储种类是指变量在程序执行过程中的作用范围。变量的存储种类有四种,分别为:围。变量的存储种类有四种,分别为:u自动(自动(auto)默认值,变量为函数内有效。默认值,变量为函数内有效。u外部(外部(extern)变量对所有函数有效。变量对所有函数有效。u静态(静态(static)u寄存器(寄存器(register)编译系统自动生成。编译系统自动生成。使用
15、外部种类存储符使用外部种类存储符extern定义的变量称为外定义的变量称为外部变量部变量。在一个函数体内,要使用一个已在该函数。在一个函数体内,要使用一个已在该函数体外或别的程序模块文件中定义过的外部变量时,体外或别的程序模块文件中定义过的外部变量时,该变量在本函数体内要用该变量在本函数体内要用extern说明。说明。当片内当片内RAM资源紧张时,不建议将外部变量放资源紧张时,不建议将外部变量放在片内在片内RAM。使用存储种类说明符使用存储种类说明符static定义的变量称为静态定义的变量称为静态变量变量。静态变量分为局部静态变量和全局静态变量。静态变量分为局部静态变量和全局静态变量。局部静态
16、变量是在两次函数调用之间仍能保持局部静态变量是在两次函数调用之间仍能保持其值的局部变量其值的局部变量。有些程序要求在多次调用之间仍。有些程序要求在多次调用之间仍然保持变量的值,使用自动变量无法作用到这一点。然保持变量的值,使用自动变量无法作用到这一点。使用全局变量有时会带来意外的副作用,这时可采使用全局变量有时会带来意外的副作用,这时可采用局部静态变量。用局部静态变量。使用存储种类说明符使用存储种类说明符register定义的变量称为定义的变量称为寄存器变量。寄存器变量。80C51访问寄存器的速度最快,通常访问寄存器的速度最快,通常将使用频率最高的那些变量定义为寄存器变量。将使用频率最高的那些
17、变量定义为寄存器变量。C51编译器能自动识别程序中使用频率最高的变量,编译器能自动识别程序中使用频率最高的变量,并自动将其作为寄存器变量,用户无需专门声明。并自动将其作为寄存器变量,用户无需专门声明。4.1.5 C-514.1.5 C-51数据的存储类型数据的存储类型定义变量时,除了说明存储种类外,还允许说定义变量时,除了说明存储种类外,还允许说明变量的存储器类型。明变量的存储器类型。存储类型与数据存放的物理存储类型与数据存放的物理存储区间和寻址方式有关,存储器类型指明该变量存储区间和寻址方式有关,存储器类型指明该变量所处的单片机的内存空间。所处的单片机的内存空间。80C51系列单片机有程序存
18、储器和数据存储器。系列单片机有程序存储器和数据存储器。数据存储器又分片内和片外数据存储器,片内数据数据存储器又分片内和片外数据存储器,片内数据存储器还分直接寻址区和间接寻址区。所以存储器还分直接寻址区和间接寻址区。所以C51的的存储类型分别对应存储类型分别对应code、data、idata、xdata以以及根据及根据80C51系列特点而设定的系列特点而设定的pdata类型。类型。存储器存储器类型类型长度长度数据范数据范围围存储空间位置存储空间位置描述描述data8位位0255 直接寻址片内数据存储器低直接寻址片内数据存储器低128B,访问速度最快,访问速度最快bdata1位位0/1可位寻址的片
19、内数据存储器(地址可位寻址的片内数据存储器(地址20H2FH共共16B)允许位和字节混合访问)允许位和字节混合访问idata8位位0255间接寻址片内数据存储器间接寻址片内数据存储器256B。允许访问片内全。允许访问片内全部地址,速度较快部地址,速度较快pdata8位位0255分页寻址片外数据存储器分页寻址片外数据存储器256B,使用指令,使用指令MOVX Rn访问,需要访问,需要2个指令周期速度较慢个指令周期速度较慢xdata16位位065535寻址片外数据存储器寻址片外数据存储器64KB,使用指令,使用指令MOVX DPTR访问,速度最慢访问,速度最慢code16位位065535寻址程序存
20、储器区寻址程序存储器区64KB,使用指令,使用指令MOVC A+DPTR访问访问对对data区的寻址是最快的,所以应该把使用频区的寻址是最快的,所以应该把使用频率高的变量放在率高的变量放在data区,由于空间有限,必须注意区,由于空间有限,必须注意使用使用data区,区,data区除了包含程序变量外,还包含区除了包含程序变量外,还包含了堆栈和寄存器组了堆栈和寄存器组data区。区。在在SMALL存储模式下,未说明存储器类型时,存储模式下,未说明存储器类型时,变量默认被定位在变量默认被定位在data区区。如果在变量定义时省略了存储器类型标识符,如果在变量定义时省略了存储器类型标识符,C51编译器
21、会选择默认的存储器类型。默认的存储编译器会选择默认的存储器类型。默认的存储器类型由器类型由SMALL、COMPACT和和LARGE存储模式存储模式指令决定。指令决定。1)data区区当在当在DATA区的区的位寻址区定义变量位寻址区定义变量,这个变量,这个变量就可进行位寻址,并且声明位变量。这对状态寄存就可进行位寻址,并且声明位变量。这对状态寄存器来说十分有用,因为它可以单独使用变量的每一器来说十分有用,因为它可以单独使用变量的每一位,而不一定要用位变量名引用位变量。位,而不一定要用位变量名引用位变量。idata区也可以存放使用比较频繁的变量,区也可以存放使用比较频繁的变量,使用使用寄存器作为指
22、针进行寻址寄存器作为指针进行寻址。在寄存器中设置。在寄存器中设置8位地址位地址进行间接寻址,与外部存储器寻址比较,它的指令进行间接寻址,与外部存储器寻址比较,它的指令执行周期和代码长度都比较短。执行周期和代码长度都比较短。2)bdata区区3)idata区区在这两个区声明变量和在其他区的语法是一样在这两个区声明变量和在其他区的语法是一样的,的,pdata区只有区只有256B,而,而xdata区可达区可达65536B code区即区即80C51的程序代码区,所以代码区的的程序代码区,所以代码区的数据是不可改变的,数据是不可改变的,80C51的代码区不可重写。一的代码区不可重写。一般代码区中可存放
23、数据表,跳转向量和状态表般代码区中可存放数据表,跳转向量和状态表 4)pdata和和xdata区区5)code区区一个变量的存储器模式确定了一个变量的存储器模式确定了未声明存储器类未声明存储器类型型的变量在内存中的地址空间。在的变量在内存中的地址空间。在SMALL模式下,模式下,该 变 量 在该 变 量 在 8 0 C 5 1 单 片 机 的 内 部单 片 机 的 内 部 R A M 中;在中;在COMPACT和和LARGE模式下,该变量在模式下,该变量在80C51单片单片机的外部机的外部RAM中。中。建议在编写源程序时,把存储模式设定为建议在编写源程序时,把存储模式设定为SMALL(默认,即
24、对存储模式不作声明),再在程(默认,即对存储模式不作声明),再在程序中把序中把xdata、pdata和和idata等类型变量进行专门声等类型变量进行专门声明。明。C51编译器允许采用三种存储模式:小编译模式编译器允许采用三种存储模式:小编译模式SMALL、紧凑编译模式、紧凑编译模式COMPACT、大编译模式、大编译模式LARGE。4.1.5 C-514.1.5 C-51数据的存储模式数据的存储模式例:例:数据类型数据类型 存储类型存储类型 变量变量char data var1;char data var1;bit data flags;bit data flags;unsigned char
25、xdata vextor10;unsigned char xdata vextor10;运算符就是完成某种特定运算的符号。运算符就是完成某种特定运算的符号。C51的数据运算操作与标准的数据运算操作与标准C语言基本相同,具有十语言基本相同,具有十分丰富的运算符,对数据有很强的表达能力分丰富的运算符,对数据有很强的表达能力:运运算符按其表达式中与运算符的关系(含有运算符算符按其表达式中与运算符的关系(含有运算符的数量)可分为单目运算符、双目运算符和三目的数量)可分为单目运算符、双目运算符和三目运算符。运算符。4.2.1 C-514.2.1 C-51的运算符的运算符一、算术运算符一、算术运算符运算符
展开阅读全文