51单片机C语言应用与开发().ppt
《51单片机C语言应用与开发().ppt》由会员分享,可在线阅读,更多相关《51单片机C语言应用与开发().ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、51单片机C语言应用与开发第第2章章 C51程序程序设计设计 第第2章章 C51程序设计程序设计nC51程序设计语言是一种编译型程序设计语言,兼顾了许多高级语言的特点和一定的汇编语言功能。n书写格式比较自由,具有完善的模块化程序结构,语言中含有功能丰富的库函数。n具有运算速度快,编译效率高,可移植性好等优点,而且可以实现对系统硬件的直接控制。n使用C语言进行程序设计已成为目前单片机及嵌入式系统开发的主流。n本章主要介绍C51程序设计的根本方法,意在将C语言程序设计与单片机控制结合起来,为后面学习单片机控制系统的开发打下一定的根底。n本章重点本章重点nC51的数据类型位标量和可寻址位变量、特的数
2、据类型位标量和可寻址位变量、特殊功能存放器型数据殊功能存放器型数据n变量的存储类型及定义变量的存储类型及定义n指针的定义和使用指针的定义和使用n结构的定义和使用结构的定义和使用nC51的运算符与表达式的运算符与表达式n中断效劳函数的定义和使用中断效劳函数的定义和使用n编译预处理编译预处理nC语言与汇编语言的混合编程语言与汇编语言的混合编程第第2章章 C51程序设计程序设计n本章难点本章难点n位标量的定义和可寻址位重命名的区别位标量的定义和可寻址位重命名的区别n特殊功能存放器型数据的定义和特点特殊功能存放器型数据的定义和特点n变量的存储类型及定义变量的存储类型及定义n结构体和联合体的定义和使用结
3、构体和联合体的定义和使用nC51的特殊运算符的特殊运算符n中断效劳函数的定义和使用中断效劳函数的定义和使用n编译预处理编译预处理nC语言和汇编语言的混合编程语言和汇编语言的混合编程第第2章章 C51程序设计程序设计n本章各章节安排本章各章节安排u2.1 Keil C51u2.2 C51的数据类型u2.3 运算符与表达式u2.4 流程控制语句u2.5 函数u2.6 编译预处理u2.7 C语言和汇编语言混合编程第第2章章 C51程序设计程序设计第第2章章 C51程序设计程序设计 l2.1 Keil C51 n2.1.1 Keil C51的主要功能模块的主要功能模块uC51优化C编译器;uA51宏汇
4、编器;u80C51工具连接器、目标文件转换器、库管理器;uWindows版dScope源程序调试器/模拟器;u Windows版Vision集成开发环境。第第2章章 C51程序设计程序设计n2.1.2 Keil C51的编程步骤的编程步骤n使用使用Keil C51编程和用其他软件开发工程时大致编程和用其他软件开发工程时大致一样,按以下步骤编程:一样,按以下步骤编程:n创立创立C或汇编语言源程序;或汇编语言源程序;n编译或汇编源文件运算符;编译或汇编源文件运算符;n纠正源文件中的错误;纠正源文件中的错误;n 连接产生目标文件;连接产生目标文件;n模拟调试用户程序。模拟调试用户程序。第第2章章 C
5、51程序设计程序设计uKeil C51编译器在遵循ANSI标准的同时,也专为8051系列微控制器进行了特别的设计。Keil C51编译器与标准的ANSI C语言编译器相比,主要区别在于前者对C语言的扩展能让用户充分使用51单片机的所有资源。这些差异主要表现在以下几个方面:u8051的存储类型;u存储模式;u数据类型;uC51指针;u函数。u相对于ANSI 的C编译器而言,Keil C51编译器的大多数扩展功能都是直接针对8051系列微处理器的。充分理解其区别和特点、深入理解并应用C51对标准ANSI C的扩展,是学习C51的关键之一。有关Keil C51集成开发环境的具体使用将在第五章详细介绍
6、。第第2章章 C51程序设计程序设计 l2.2 C51的数据类型的数据类型 l数据:具有一定格式的数字或数值数据:具有一定格式的数字或数值。数据是计。数据是计算机操作的对象,任何程序设计都离不开对于算机操作的对象,任何程序设计都离不开对于数据的处理。数据的处理。l数据类型数据类型:数据的不同存储格式:数据的不同存储格式。l数据结构数据结构:数据按一定的数据类型进行排列、:数据按一定的数据类型进行排列、组合、架构组合、架构,数据在计算机内存中的存放情况,数据在计算机内存中的存放情况由数据结构决定由数据结构决定。lC语言的数据结构是以数据类型出现的语言的数据结构是以数据类型出现的:包括根:包括根本
7、类型、构造类型、指针类型以及空类型等本类型、构造类型、指针类型以及空类型等。根本类型有位根本类型有位(bit)、字符、字符(char)、整型、整型(int)、短整型短整型(short)、长整型、长整型(1ong)、浮点型、浮点型(float)以及双精度浮点型以及双精度浮点型(double)等;构造类等;构造类型包括数组型包括数组(array)、结构体、结构体(struct)、共用体、共用体(union)以及枚举类型以及枚举类型(enum)等。等。第第2章章 C51程序设计程序设计n对于单片机编程而言,支持的数据类型和编译器有关,比方在C51编译器中整型(int)和短整型(short)相同,浮点
8、型(float)和双精度浮点型(double)相同。表21列出了C51的数据类型。第第2章章 C51程序设计程序设计nchar字符类型n字符型char分为有符号字符型signed char和无符号字符型unsigned char两种,默认值为有符号型。字符型数据长度为一个字节。有符号字符型数据字节中的最高位为符号位,“0表示正数,“1表示负数,负数用补码表示。无符号字符型数据字节中的位均用来表示数本身,而不包括符号,其数值范围为0255。nint整型n整型int同样分为有符号整型(signed int)和无符号整型(unsigned int)两种,默认值为有符号整型。整型数据长度为两个字节。n
9、long长整型n长整型(long)也分为有符号长整型(signed long)和无符号长整型(unsigned long)两种,默认值为有符号长整型。长整型数据长度为四个字节。第第2章章 C51程序设计程序设计nfloat浮点型n单精度浮点型(float)数据占用四个字节32位二进制数,在内存中的存放格式如下:n 其中,S为符号位,位于最高字节的最高位。“1表示负数,“O表示正数。E为阶码,占用8位二进制数,存放在两个高字节中。为了防止出现负的阶码值,阶码E值是以2为底的指数再加上偏移量127,指数可正可负。阶码E的正常取值范围为1254,那么实际指数的取值范围为126+127。M为尾数的小数
10、局部,用23位二进制数表示,存放在三个低字节中。尾数的整数局部永远为l,因此尾数隐含存在,不予保存。小数点位于隐含的整数位“1后面。一个浮点数的数值范围是(1)S2E127(1.M)。例如:第第2章章 C51程序设计程序设计p浮点数124.75=42F94000H,在内存中的存放格式为:p需要指出的是,浮点型数据除了有正常数值之外,还可能出现非正常数值。根据IEEE标准,当浮点型数据取以下数值(16进制数)时即为非正常值:FFFFFFFFH 非数(NaN)7F800000H 正溢出(+INF)FF800000H 负溢出(INF)u另外,8051单片机不包括捕获浮点运算错误的中断向量,需要用户依
11、据可能出现的错误条件用软件方法进行相应的处理。第第2章章 C51程序设计程序设计n*指针型n在C51中指针变量的长度一般为13个字节。指针变量也具有类型,其表示方法是在指针符号“*的前面冠以数据类型符号。如:nchar*point1,表示point1是一个字符型的指针变量;nfloat *point2,表示point2是一个浮点型的指针变量。n指针变量的类型表示该指针所指向地址中数据的类型,使用指针型变量可以方便地对8051单片机的各局部物理地址直接进行操作。nbit位标量n位标量bit是C51编译器的一种扩充数据类型,利用它可定义一个位变量,但不能定义位指针,也不能定义位数组。第第2章章 C
12、51程序设计程序设计u位标量用关键字“bit定义,是一个二进制位。函数中可以包含bit类型的参数,函数的返回值也可以为bit型。位标量用于定义一个标量,表示某个二进制位的值,这对能直接进行位操作的80C51来说,很有实用价值。它的语法结构是:u bit 标量名;u例如:u bit flag;/定义一个位标量flag,作为程序中的一个标志位usfr特殊功能存放器u特殊功能存放器型数据sfr是C51编译器的一种扩充数据类型,利用它可以访问8051单片机内的所有特殊功能存放器。sfr型数据占用一个字节内存单元,取值范围为0255。第第2章章 C51程序设计程序设计nsfrl6n16位特殊功能存放器型
13、数据sfr16,占用两个字节的内存单元,取值范围为065535。nsbit可寻址位 n可寻址位(sbit)是C51编译器的一种扩充数据类型,利用它可以访问8051单片机内部RAM中的可寻址位或特殊功能存放器中的可寻址位。例如:nsfr P0=0 x80;/将8051单片机的P0的口地址定义为0 x80 nsbit FLAG1=P01;/将PO.1位定义为FLAG1 nbit和sbit的主要区别是:nbit定义的是一个标量 n 而sbit是将一个的位重命名 第第2章章 C51程序设计程序设计n2.2.1 常量常量 在程序运行过程中,其值不能被改变的量称为常量。常量的数据类型有整型、浮点型、字符型
14、和字符串型等。u1整型常量p整型常量就是整型常数,可表示为以下几种形式:十进制整数:如1234、5678、0等。十六进制整数:以0 x开头的数是十六进制数,如0 x123表示十六进制数123H,相当于十进制数291。Ox1a表示十六进制数1aH,相当于十进制数26。ANSI C标准规定十六进制数的数字为09,再加字母af。长整数:在数字后面加一个字母L就构成了长整数,如2048L、0123L、0 xffOOL等。第第2章章 C51程序设计程序设计u2.浮点型常量u浮点型常量有十进制数和指数两种表示形式。u十进制数表示形式又称定点表示形式,由数字和小数点组成。如:0.3141、.3141、314
15、.1、3141.及0.0都是十进制数表示形式的浮点型常量。在这种表示形式中,如果整数或小数局部为0可以省略不写,但必须有小数点。u指数表示形式为;u 数字.数字e数字u 其中,为可选项,其中的内容根据具体情况可有可无,其它局部为必须项。如123e4.5e6、7.0e8等都是合法的指数形式的浮点型常量;而e9、5e4.3和e都是不合法的表示形式。第第2章章 C51程序设计程序设计u3.字符型常量u在C语言中,字符常量是用单引号括起来的单个字符。例如a,b等。对不可显示的控制字符,可以在该字符前面加一反斜杠“构成专用转义字符。转义字符可以完成一些特殊功能和输出时的格式控制。常用转义字符如表22所示
16、。第第2章章 C51程序设计程序设计u4字符串常量u字符串型常量是由一对双引号“括起的字符序列,如“ABCD、“$1234等都是字符串常量。u当双引号内的字符个数为0时,称为空串常量。u需要注意的是,字符串常量首尾的双引号是界限符,当需要表示双引号字符串时,要使用转义字符“。如printf(“He said I am a studentn)。第第2章章 C51程序设计程序设计n2.2.3 数组数组n数组是一组具有固定数目和相同类型数组元素数组是一组具有固定数目和相同类型数组元素的有序集合,其数组元素的类型为该数组的根的有序集合,其数组元素的类型为该数组的根本类型。构成一个数组的各元素必须是同一
17、类本类型。构成一个数组的各元素必须是同一类型的变量,不允许在同一数组中出现不同类型型的变量,不允许在同一数组中出现不同类型的变量。的变量。n数组数据是用同一个名字的不同下标访问的,数组数据是用同一个名字的不同下标访问的,例如数组例如数组ai,当,当i0,1,2,n时时a0,a1,an分别是数组分别是数组ai的元素的元素(或或成员成员)。数组有一维、二维、三维、多维数组。数组有一维、二维、三维、多维数组之分。常用的有一维、二维数组和字符数组。之分。常用的有一维、二维数组和字符数组。第第2章章 C51程序设计程序设计p变量的存储种类有四种:p自动(auto)p外部(extern)p静态(stati
18、c)p存放器(registerp 在定义一个变量时如果省略存储种类选项,那么该变量将为自动(auto)变量。p变量的数据类型有:p位变量 p字符型变量 p整型变量 p浮点型变量 第第2章章 C51程序设计程序设计u变量的存储器类型u定义一个变量时除了需要说明其存储种类、数据类型之外,C51编译器还允许说明变量的存储器类型。Keil C51编译器完全支持8051系列单片机的硬件结构,可以访问其硬件系统的所有局部。对每个变量可以准确地赋予其存储器类型,从而可使其能在单片机系统内准确地定位。存储类型与8051单片机实际存储空间的对应关系如表23所示。第第2章章 C51程序设计程序设计code存储器类
19、型对应64KB程序存储器空间。程序存储器是只读不写的,如果将变量定义成code存储器类型,那么这个变量的值只能允许访问和引用,不能修改。该存储空间除存放程序语句的机器码外,还可存储各种查寻表。C51程序中将变量定义为code存储器类型,可以完成与汇编语言相同的功能。data存储器类型定义的变量存储在内部RAM的低128字节地址空间。data存储器类型对应的空间主要用作数据区。该存储区内,指令用一个或两个周期来访问数据,在所有区内访问中速度最快。通常将使用较频繁的变量、局部变量或用户自定义变量存储在data区。bdata存储器类型对应的空间称为位寻址区,即bdata区。该区的范围是从片内RAM地
20、址20H开始到2FH结束,包括16字节,共128个可以寻址的位,每一位都可单独操作。80C51有17条位操作指令,程序控制非常方便,并且有助于软件代替外部组合逻辑。位寻址区的这16字节也可以进行字节寻址。第第2章章 C51程序设计程序设计使用xdata存储类型定义常量、变量时,C51编译器会将其定位在外部数据存储空间(片外RAM),该空间位于片外附加的8K、16K,32K或64K RAM芯片中,其最大寻址范围为64K。要使用外部数据区信息时,需用指令将其移动到内部数据区,数据处理完成后,结果再返回到片外数据存储区。片外数据存储区主要用于存放不经常使用的变量,或收集等待处理的数据,或存放要被发往
21、另一台计算机的数据。pdata存储类型属于xdata类型,它的一字节地址(高8位)被妥善保存在P2口中,用于I/O操作。idata存储类型可以间接寻址全部内部数据存储器空间(可以超过127个字节)。第第2章章 C51程序设计程序设计u存储器模式u存储模式决定了变量的默认存储类型,C51提供了3种存储器模式来存储变量。定义变量时如果省略“存储器类型选项,系统那么会按编译模式SMALL、COMPACT或LARGE所规定的默认存储器类型确定变量的存储区域,不能位于存放器中的参数传递变量和过程变量也保存在默认的存储器区域。无论什么存储模式都可以声明变量在任何的80C51存储区范围,而把最常用的命令如循
22、环计数器和队列索引放在内部数据区,可以显著地提高系统性能。需要特别指出的是,变量的存储种类与存储器类型是完全无关的。uC51系统的存储模式,可以在源程序中用语句直接定义,也可以在C51的源程序调试集成软件环境中,通过对某个工程文件的选项来设置。第第2章章 C51程序设计程序设计pSMALL存储模式 pSMALL存储模式也叫小模式,该模式中,C51把所有函数变量和局部数据段,以及所有参数传递,都放在内部数据存储器data区,因此这种存储模式的优势为数据存取速度很快,但small存储模式的地址空间受限,因为访问速度快,在写小型应用程序时,变量和数据应放在data内部数据存储器。而在较大的应用程序中
23、data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据应放置在其他存储区域。pCOMPACT存储模式 pCOMPACT存储模式又称为压缩的存储模式,该模式下,所有的函数、程序变量和局部数据段定位在80C51嵌入式系统的pdata区。外部数据存储区采用分页访问,每页256字节,最多256页,通过存放器R0和R1对pdata区的数据进行间接寻址,比使用DPTR要快一些。第第2章章 C51程序设计程序设计pLARGE存储模式 pLARGE存储模式也叫大模式,该模式中,所有函数和过程的变量和局部数据段都定位在80C51的外部数据存储器中,容量最多可支持64 KB,要求使用D
24、PTR数据指针访问数据或定义成xdada的存储器类型。p关于存储模式的设置,要注意以下两点 p如果用参数传递和分配再入函数的堆栈,应尽量使用SMALL存储模式。Keil C51尽量使用内部存放器组进行参数传递,在存放器组中可以传递参数的数量和压缩存储模式一样,再入函数的模拟栈将在xdata中,由于对xdata区数据的访问最慢,所以要仔细考虑变量应存储的位置,使数据的存储速度得到优化。第第2章章 C51程序设计程序设计可以使用混合存储模式。Keil允许使用混合的存储模式,这点在大存储模式中是非常有用的。在大存储器模式下,有些过程对数据传递的速度要求很高,就把过程定义在小存储模式存放器中,这使得编
25、译器为该过程的局部变量在内部RAM中分配存储空间并保证所有参数都通过内部RAM进行传递。在小模式下,有些过程需要大量存储空间,可以把过程声明为压缩模式或大模式,这种过程中的局部变量将被存储在外部存储区中,也可以通过过程中的变量声明,把变量分配在xdata段中。重新定义数据类型C语言程序中,除了可以采用以上介绍的数据类型外,用户还可以根据需要对数据类型重新定义。重新定义时需用到关键字typedef,定义方法如下:typedef 已有的数据类型 新的数据类型名;第第2章章 C51程序设计程序设计p其中“已有的数据类型是指C语言中所有的数据类型,包括结构、指针和数组等,“新的数据类型名可按用户习惯或
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 语言 应用 开发
限制150内