第3章-C51语言编程基础.ppt
《第3章-C51语言编程基础.ppt》由会员分享,可在线阅读,更多相关《第3章-C51语言编程基础.ppt(178页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章C51语言编程基础语言编程基础1单片机应用系统日趋复杂,对单片机应用系统日趋复杂,对程序的可读性、升级与维护以及模块化要求越程序的可读性、升级与维护以及模块化要求越来越高来越高,对软件编程要求也越来越高,要求编程人员在短时间内编写出执,对软件编程要求也越来越高,要求编程人员在短时间内编写出执行效率高、运行可靠的程序代码。同时,也要方便多个编程人员来进行协行效率高、运行可靠的程序代码。同时,也要方便多个编程人员来进行协同开发。同开发。C51C51语言是近年来在语言是近年来在80518051单片机开发中,普遍使用的程序设计语言,能单片机开发中,普遍使用的程序设计语言,能直接对直接对805
2、18051单片机硬件进行操作,既有高级语言特点,又有汇编语言特点单片机硬件进行操作,既有高级语言特点,又有汇编语言特点,因此,因此在在80518051单片机程序设计中,得到广泛使用。单片机程序设计中,得到广泛使用。下面介绍下面介绍80518051单片机的单片机的C51C51语言,以及如何使用语言,以及如何使用C51C51语言集成化开发平台语言集成化开发平台KeilKeil Vision3Vision3,进行,进行C51C51程序设计与开发。程序设计与开发。23.1 C513.1 C51编程语言简介编程语言简介用于用于80518051单片机编程的单片机编程的C C语言,在标准语言,在标准C C基
3、础上针对基础上针对80518051硬件特点进行扩硬件特点进行扩展,并向展,并向80518051上移植,经多年努力,上移植,经多年努力,C51C51已成为公认的高效、简洁的已成为公认的高效、简洁的80518051单片机的单片机的实用高级编程语言实用高级编程语言。与。与80518051汇编语言相比,汇编语言相比,C51C51语言在语言在功能上、结构性、可读性、可维护性上有明显优势,易学易用。功能上、结构性、可读性、可维护性上有明显优势,易学易用。3.1.1 C513.1.1 C51语言与语言与80518051汇编语言比较汇编语言比较与与80518051汇编语言相比,汇编语言相比,C51C51有如下
4、优点。有如下优点。(1 1)可读性好)可读性好。C51C51语言程序比汇编语言程序的可读性好,编程效率高,语言程序比汇编语言程序的可读性好,编程效率高,程序程序便于修改、维护以及升级便于修改、维护以及升级。3(2 2)模块化开发与资源共享模块化开发与资源共享。用。用C51C51开发的程序模块可不经修改,直接被其开发的程序模块可不经修改,直接被其他工程所用,使得开发者能够很好地他工程所用,使得开发者能够很好地利用已有的大量标准利用已有的大量标准C C程序资源与丰富程序资源与丰富的库函数,减少重复劳动,的库函数,减少重复劳动,同时也有利于多个工程师进行协同开发。同时也有利于多个工程师进行协同开发。
5、(3 3)可移植性好。可移植性好。为某种型号单片机开发的为某种型号单片机开发的C C语言程序,只需把与硬件相关语言程序,只需把与硬件相关的的头文件头文件和和编译链接的参数编译链接的参数进行适当修改,就可方便地移植到其他型号的单进行适当修改,就可方便地移植到其他型号的单片机上。片机上。例如例如,为,为80518051单片机编写的程序通过改写头文件以及少量的程序行,单片机编写的程序通过改写头文件以及少量的程序行,就可方便地移植到就可方便地移植到PICPIC单片机上。单片机上。(4 4)生成的代码效率高。生成的代码效率高。当前较好的当前较好的C51C51语言编译系统编译出来的代码效率语言编译系统编译
6、出来的代码效率只比直接使用汇编语言只比直接使用汇编语言低低20%20%左右,如果使用左右,如果使用优化编译选项优化编译选项,最高可达到,最高可达到90%90%左右。左右。43.1.2 C513.1.2 C51语言与标准语言与标准C C语言的比较语言的比较C51C51语言与标准语言与标准C C语言间有许多相同地方,但也有自身特点。不同的嵌入式语言间有许多相同地方,但也有自身特点。不同的嵌入式C C语言编译系统之所以与标准语言编译系统之所以与标准C C语言有不同的地方,主要是由于它们所针语言有不同的地方,主要是由于它们所针对的硬件系统不同。对于对的硬件系统不同。对于80518051单片机,目前广泛
7、使用的是单片机,目前广泛使用的是C51C51语言。语言。C51C51语言基本语法与标准语言基本语法与标准C C相同,是相同,是在标准在标准C C的基础上的基础上进行适合进行适合80518051内核单内核单片机硬件的扩展片机硬件的扩展。深入理解。深入理解C51C51语言语言对标准对标准C C语言的语言的扩展部分扩展部分以及它们的以及它们的不同之处,是掌握不同之处,是掌握C51C51语言的关键之一。语言的关键之一。5C51C51语言与标准语言与标准C C语言语言一些差别一些差别如下。如下。(1 1)库函数不同。)库函数不同。标准标准C C中不适合于嵌入式控制器系统的库函数,被排除中不适合于嵌入式控
8、制器系统的库函数,被排除在在C51C51语言之外,如字符屏幕和图形函数。有些库函数必须针对语言之外,如字符屏幕和图形函数。有些库函数必须针对80518051的硬件的硬件特点来做出相应的开发。特点来做出相应的开发。例如,例如,在标准在标准C C中,库函数中,库函数printfprintf和和scanfscanf,常用于屏幕打印和接收字符,常用于屏幕打印和接收字符,而在而在C51C51语言中,主要用于语言中,主要用于串行口数据的收发串行口数据的收发。(2 2)数据类型有一定区别)数据类型有一定区别。在。在C51C51中增加几种中增加几种80518051单片机的数据类型,在单片机的数据类型,在标准标
9、准C C的基础上又扩展了的基础上又扩展了4 4种类型。例如,种类型。例如,80518051单片机包含位操作空间和丰富单片机包含位操作空间和丰富的位操作指令,因此,的位操作指令,因此,C51C51语言与标准语言与标准C C语言相比语言相比增加了增加了位类型位类型。6 (3 3)C51C51语言变量存储模式与标准语言变量存储模式与标准C C语言中变量存储模式数据不一样语言中变量存储模式数据不一样。标。标准准C C最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一最初是为通用计算机设计的,在通用计算机中只有一个程序和数据统一寻址的内存空间,而寻址的内存空间,而C51C51语言中语言中变量
10、的存储模式变量的存储模式与与80518051单片机的单片机的各种存储器各种存储器区紧密相关区紧密相关。(4 4)数据存储类型不同)数据存储类型不同。80518051存储区可分为存储区可分为内部数据存储区、外部数据内部数据存储区、外部数据存储区以及程序存储区存储区以及程序存储区。内部数据存储区内部数据存储区可分为可分为3 3个不同的个不同的C51C51存储类型:存储类型:datadata、idataidata和和bdatabdata。外部数据存储区分外部数据存储区分为为2 2个不同的个不同的C51C51存储类型:存储类型:xdataxdata和和p pdatadata。程序存储区程序存储区只能读
11、不能写,可能在只能读不能写,可能在80518051内部或者在外部,内部或者在外部,C51C51语言提供的语言提供的codecode存储类型用来访问程序存储区。存储类型用来访问程序存储区。7 (5 5)标准)标准C C语言没有处理单片机中断的定义语言没有处理单片机中断的定义,而,而C51C51语言中有专门的中语言中有专门的中断函数。断函数。(6 6)头文件不同)头文件不同。C51C51语言头文件必须把语言头文件必须把80518051单片机内部的外设硬件资单片机内部的外设硬件资源(如定时器、中断、源(如定时器、中断、I/OI/O等)相应的等)相应的特殊功能寄存器特殊功能寄存器写入写入到头文件到头文
12、件内,内,而标准而标准C C不用。不用。(7 7)程序结构的差异)程序结构的差异。由于。由于80518051单片机的硬件资源有限,它的编译系单片机的硬件资源有限,它的编译系统统不允许太多的程序嵌套不允许太多的程序嵌套。其次,标准。其次,标准C C语言所具备的语言所具备的递归特性递归特性不被不被C51C51语言支持。语言支持。8但从数据运算操作、程序控制语句以及函数的使用上来说,但从数据运算操作、程序控制语句以及函数的使用上来说,C51C51与标准与标准C C几乎几乎没有什么明显差别。如果程序设计者具备了有关标准没有什么明显差别。如果程序设计者具备了有关标准C C语言的编程基础,语言的编程基础,
13、只要注意只要注意C51C51与标准与标准C C不同之处,并熟悉不同之处,并熟悉80518051单片机的硬件结构,就能较单片机的硬件结构,就能较快掌握快掌握C51C51编程。编程。9103.2 C513.2 C51语言程序设计基础语言程序设计基础本节在标准本节在标准C C基础上,了解掌握基础上,了解掌握C51C51的数据类型和存储类型、的数据类型和存储类型、C51C51的基本运算的基本运算与流程控制语句、与流程控制语句、C51C51语言构造数据类型、语言构造数据类型、C51C51函数以及函数以及C51C51程序设计的其程序设计的其他一些问题,为他一些问题,为C51C51的程序开发打下基础的程序开
14、发打下基础。113.2.1 C513.2.1 C51语言中的数据类型与存储类型语言中的数据类型与存储类型1 1数据类型数据类型 数据是单片机操作的对象,具有一定格式的数字或数值,数据的不同格数据是单片机操作的对象,具有一定格式的数字或数值,数据的不同格式就称为式就称为数据类型数据类型。KeilKeil C51 C51支持的基本数据类型见支持的基本数据类型见表表3-13-1。针对针对80518051的硬件特点,的硬件特点,C51C51在标准在标准C C基础上,基础上,扩展了扩展了4 4种种数据类型数据类型(见表(见表3-13-1中最后中最后4 4行)。行)。注意,扩展的注意,扩展的4 4种数据类
15、型,种数据类型,不能使用不能使用指针指针来对它们存取。来对它们存取。12132 2C51C51的扩展数据类型的扩展数据类型 下面对扩展的下面对扩展的4 4种数据类型说明。种数据类型说明。(1 1)位变量位变量bitbit的值的值可以是可以是1 1(truetrue),也可是),也可是0 0(falsefalse)。)。(2 2)特殊功能寄存器特殊功能寄存器sfrsfr。80518051单片机的特殊功能寄存器分布在片内数据单片机的特殊功能寄存器分布在片内数据存储区的地址单元存储区的地址单元80H80HFFHFFH之间之间,“sfrsfr”数据类型数据类型占用一个内存单元。利占用一个内存单元。利用
16、它可访问用它可访问80518051单片机内部的所有特殊功能寄存器。单片机内部的所有特殊功能寄存器。例如:例如:sfrsfr P1=0 x90 P1=0 x90这一语句定义了这一语句定义了P1P1端口在片内的寄存器,在程序后续端口在片内的寄存器,在程序后续的语句中可以的语句中可以用用“P1=0 xff”P1=0 xff”,使,使P1P1的所有引脚输出为高电平的语句来操作的所有引脚输出为高电平的语句来操作特殊功能寄存器。特殊功能寄存器。14(3 3)特殊功能寄存器)特殊功能寄存器sfr16sfr16。“sfr16”sfr16”数据类型数据类型占用两个内存单元占用两个内存单元,用于操作占两个字节的特
17、殊功能寄,用于操作占两个字节的特殊功能寄存器。存器。例如例如:“sfr16 DPTR=0 x82”sfr16 DPTR=0 x82”语句定义了片内语句定义了片内1616位数据指针寄存器位数据指针寄存器DPTRDPTR,其低,其低8 8位字节地址为位字节地址为82H82H,高,高8 8位字节地址为位字节地址为83H83H。在程序的后续语句中。在程序的后续语句中就可对就可对DPTRDPTR进行操作。进行操作。(4 4)特殊功能位)特殊功能位sbitsbit。sbitsbit是指是指AT89S51AT89S51片内特殊功能寄存器的可寻址位。例如:片内特殊功能寄存器的可寻址位。例如:sfrsfrPSW
18、=0 xd0PSW=0 xd0;/定义定义PSWPSW寄存器地址为寄存器地址为0 xd00 xd0sbitsbitOV=PSW2OV=PSW2;/定义定义OVOV位为位为PSW.2PSW.2 符号符号“”前是特殊功能寄存器名字,前是特殊功能寄存器名字,“”后的数字定义特殊功能寄存后的数字定义特殊功能寄存器可寻址位在寄存器中的位置,取值必须是器可寻址位在寄存器中的位置,取值必须是0 07 7。15 注意,注意,不要把不要把bitbit与与sbitsbit相混淆相混淆。bitbit定义定义普通的位变量普通的位变量,只能是二进制,只能是二进制的的0 0或或1 1。sbitsbit是定义特殊功能寄存器
19、的是定义特殊功能寄存器的可寻址位可寻址位,值是可以进行位寻址的特,值是可以进行位寻址的特殊功能寄存器的某位的绝对地址,殊功能寄存器的某位的绝对地址,例如,例如,PSWPSW寄存器寄存器OVOV位的绝对地址位的绝对地址0 xd20 xd2。上面的例子还涉及到上面的例子还涉及到C51注释注释的写法问题的写法问题,C51的的注释写法有注释写法有2种种:(1)/,两个斜杠后面跟着的为注释语句,本写法只能注释一行,当换两个斜杠后面跟着的为注释语句,本写法只能注释一行,当换行时,必须在新行上重新写两个斜杠。行时,必须在新行上重新写两个斜杠。(2)/*/,一个斜杠与星号结合使用,本写法可注释任一行,即斜杠星
20、,一个斜杠与星号结合使用,本写法可注释任一行,即斜杠星号与星号斜杠之间的所有文字都作为注释,即注释有多行时,只需在注释的号与星号斜杠之间的所有文字都作为注释,即注释有多行时,只需在注释的开始处,加斜杠星号,在注释的结尾处,加上星号斜杠即可。开始处,加斜杠星号,在注释的结尾处,加上星号斜杠即可。加注释的目的加注释的目的是为了便于读懂程序,所有注释都不参与程序编译,编是为了便于读懂程序,所有注释都不参与程序编译,编译器在编译过程中会自动删去注释。译器在编译过程中会自动删去注释。16173 3数据存储类型数据存储类型 在讨论在讨论C51C51数据类型时,须同时提及它的存储类型,以及它与数据类型时,须
21、同时提及它的存储类型,以及它与80518051单片机单片机存储器结构的关系,因为存储器结构的关系,因为C51C51定义的任何数据类型定义的任何数据类型必须以一定的方式,定位在必须以一定的方式,定位在80518051单片机的某一存储区中,单片机的某一存储区中,否则没有任何实际意义。否则没有任何实际意义。8051 8051有片内、片外数据存储区,还有程序存储区。有片内、片外数据存储区,还有程序存储区。片内的数据存储区是可读写的,片内的数据存储区是可读写的,80518051的衍生系列最多可有的衍生系列最多可有256256字节的内部字节的内部数据存储区(例如数据存储区(例如AT89S52AT89S52
22、单片机),其中低单片机),其中低128128字节可直接寻址,高字节可直接寻址,高128128字节字节(80H80HFFHFFH)只能间接寻址,从地址)只能间接寻址,从地址20H20H开始的开始的1616字节可位寻址。字节可位寻址。18 内部内部数据存储区数据存储区可分为可分为3 3个不同的数据存储类型:个不同的数据存储类型:datadata、idataidata和和bdatabdata。访问访问片外数据存储区片外数据存储区比访问比访问片内数据存储区片内数据存储区慢慢,因为访问片外数据存储,因为访问片外数据存储区要通过对数据指针加载地址来间接寻址访问。区要通过对数据指针加载地址来间接寻址访问。C
23、51C51提供两种不同的数据存储类型提供两种不同的数据存储类型xdataxdata和和pdatapdata来访问片外数据存储区。来访问片外数据存储区。程序存储区程序存储区只能读不能写,可能在只能读不能写,可能在80518051单片机内部或者外部,或外部和单片机内部或者外部,或外部和内部都有,由内部都有,由80518051单片机硬件决定,单片机硬件决定,C51C51提供了提供了codecode存储类型来访问程序存存储类型来访问程序存储区。储区。19C51C51存储类型存储类型与与80518051实际的实际的存储空间存储空间的对应关系见的对应关系见表表3-23-2。下面对下面对表表3-23-2各种
24、存储区作以说明。各种存储区作以说明。(1 1)DATADATA区区寻址最快,应把常使用的变量放在该区,但该区存储空间有限,寻址最快,应把常使用的变量放在该区,但该区存储空间有限,DATADATA区除区除了包含程序变量外,还包含了堆栈和寄存器组。了包含程序变量外,还包含了堆栈和寄存器组。DATADATA区声明中的存储区声明中的存储类型标识符为类型标识符为datadata,通常指片内,通常指片内RAM128RAM128字节的内部数据存储的变量,字节的内部数据存储的变量,可直接寻址。可直接寻址。声明举例:声明举例:unsigned charunsigned char data data system
25、_statussystem_status=0;=0;unsigned unsigned intint datadata unit_id8;unit_id8;char char datadata inp_string20 inp_string20;2021标准变量和用户自声明变量都可存储在标准变量和用户自声明变量都可存储在DATADATA区中,只要不超过区中,只要不超过DATADATA区的范围区的范围即可,由于即可,由于C51C51用默认的寄存器组来传递参数,这样用默认的寄存器组来传递参数,这样DATADATA区至少失去区至少失去8 8字节空字节空间。间。另外,另外,当内部堆栈溢出当内部堆栈溢出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 语言 编程 基础
限制150内