您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第3章 C51语言编程基础
第3章C51语言编程基础1内容概要目前单片机应用设计与开发,多使用C51语言来编程。C51语言是在标准C的基础上,根据单片机存储器硬件结构及内部资源,扩展相应的数据类型和变量,而在语法规定、程序结构与设计方法上,都与标准C相同。本章介绍C51语言的基础知识、对C51集成开发环境KeilµVision3以及单片机虚拟仿真平台Proteus也作以介绍。2在单片机应用开发中,软件编程占有非常重要的地位。要求编程人员在短时间内编写出执行效率高、运行可靠的程序代码。同时,由于实际系统的日趋复杂,对程序的可读性、升级与维护以及模块化的要求越来越高,以方便多个工程师协同开发。C51语言是近年来在国内外的51单片机开发中,普遍使用的一种程序设计语言。C51能直接对单片机硬件进行操作,既有高级语言的特点,又有汇编语言的特点,因此在单片机应用的程序设计中,得到非常广泛的使用。3.1编程语言KeilC51简介KeilC51(简称C51),是在标准C语言的基础上发展的。3.1.1KeilC51简介KeilC51语言是在标准C的基础上针对51单片机的硬件特点进行的扩展,并向51单片机上移植,经多年努力,C51语言已成为公认的高效、简洁的51单片机的实用高级编程语言。与汇编语言相比,用C51语言进行软件开发,有如下优点:(1)可读性好。C51语言程序比汇编语言程序的可读性好,因而编程效率高,程序便于修改、维护以及程序升级。4(2)模块化开发与资源共享。C51开发的模块可直接被其他项目所用,能很好地利用已有的标准C程序资源与丰富的库函数,减少重复劳动,也有利于多个工程师的协同开发。(3)可移植性好。为某型单片机开发的C51程序,只需将与硬件相关之处和编译链接的参数进行适当修改,就可方便地移植到其它型号的单片机上。例如,为51单片机编写的程序通过改写头文件以及少量的程序行,就可以方便地移植到PIC单片机上。(4)生成的代码效率高。代码效率比直接使用汇编语言低20%左右,如使用优化编译选项,最高可达90%左右,效果会更好。53.1.2C51与标准C的比较C51标准C语言有许多相同的地方,但也有自身特点。不同的嵌入式C语言编译系统与标准C语言的不同,主要是由于它们所针对的硬件系统不同。对于51单片机,目前广泛使用的是KeilC51语言,简称C51语言。C51的基本语法与标准C相同,C51在标准C的基础上进行了适合于51系列单片机硬件的扩展。深入理解KeilC51对标准C的扩展部分以及不同之处,是掌握C51语言的关键之一。C51与标准C的主要区别如下:6(1)库函数的不同。标准C中的部分库函数不适合于嵌入式控制器系统,被排除在KeilC51之外,如字符屏幕和图形函数。有些库函数可继续使用,但这些库函数都必须针对51单片机的硬件特点做出相应的开发。例如库函数printf和scanf,在标准C中,这两个函数通常用于屏幕打印和接收字符,而在KeilC51中,主要用于串行口数据的收发。(2)数据类型有一定的区别。在C51中增加了几种针对51单片机特有的数据类型,在标准C的基础上又扩展了4种类型。例如,51单片机包含位操作空间和丰富的位操作指令,因此,C51语言与标准C相比就要增加位类型。7(3)C51的变量存储模式与标准C中的变量存储模式数据不一样。标准C是为通用计算机设计的,计算机中只有一个程序和数据统一寻址的内存空间,而C51中变量的存储模式与51单片机的存储器紧密相关。(4)数据存储类型的不同。51单片机存储区可分为内部数据存储区、外部数据存储区以及程序存储区。内部数据存储区可分为3个不同的C51存储类型:data、idata和bdata。外部数据存储区分为2个不同的C51存储类型:xdata和pdata。程序存储区只能读不能写,在51单片机内部或外部。C51提供了code存储类型来访问程序存储区。8(5)标准C语言没有处理单片机中断的定义。C51中有专门的中断函数。(6)C51语言与标准C语言的输入/输出处理不一样。C51语言中的输入/输出是通过51单片机的串行口来完成的,输入/输出指令执行前必须对串行口进行初始化。(7)头文件的不同。C51语言与标准C头文件的差异是C51头文件必须把51单片机内部的外设硬件资源如定时器、中断、I/O等所相应的功能寄存器的写入头文件内。(8)程序结构的差异。由于51单片机硬件资源有限,它的编译系统不允许太多的程序嵌套。其次,标准C所具备的递归特性不被C51语言支持。9但是从数据运算操作、程序控制语句以及函数的使用上来说,KeilC51与标准C几乎没有什么明显的差别。如果程序设计者具备了有关标准C的编程基础,只要注意KeilC51与标准C的不同之处,并熟悉51单片机的硬件结构,就能够较快地掌握C51的编程。3.2KeilC51的开发工具KeilC51是德国Keilsoftware公司开发的用于51单片机的C51语言开发软件,在兼容标准C的基础上,又增加了很多与51单片机硬件相关的编译特性,使得在51系列单片机上开发应用程序更为方便和快捷,生成的程序代码运行速度快,所需的存储器空间小,完全可以和汇编语言相媲美。10它支持众多的8051架构的芯片,同时集编辑、编译、仿真等功能于一体,具有强大的软件调试功能,是众多的单片机应用开发软件中的最优秀软件之一。3.2.1集成开发环境KeilµVision3简介KeilC51已集成到一个功能强大的集成开发环境(IDE—IntergratedDevelopmentEviroment)µVision3中,用于51单片机的Windows下的集成开发环境,提供对8051内核的各种型号的支持,为51单片机软件开发提供全新的C语言开发环境。该开发环境下集成了文件编辑处理、编译链接、项目(Project)管理、窗口、工具引用和仿真软件模拟器以及Monitor51硬件目标调试器等多种功能,所有功能均11可在KeilµVision3的开发环境中极为简便地进行操作。KeilµVision3完全兼容先前的KeilµVision2版本。Keil公司目前已经推出了v7.0以上版本的C51编译器,较新的版本为KeilC51v8.08a。经常用到KeilC51和KeilµVision3两个术语。KeilC51一般简写为C51,指的是51单片机编程所用的C51语言;而KeilµVision3,可简写为µVision3,指的是用于51单片机的C51程序编写、调试的集成开发环境。µVision3内部集成了源程序编辑器,并允许用户在编辑源文件时就可设置程序调试断点,便于在程序调试过程中快速检查和修改程序。此外,µVision3还支持软件模拟仿真(Simulator)和用户目标板调试(Monitor51)两种工作方式。在软件模拟仿真方式下不需要任何51单片机及其外围硬件即可完成用户程序仿真调试。在用户目标板调试方式下,利用硬件目标板中的监控程序可以直接调试目标硬件系统,使用户节省购买硬件仿真器的费用。C51程序的程序开发是在KeilµVision3开发环境下进行的。开发者可购买KeilµVision3软件,也可到Keilsoftware公司的主页免费下载Eval(评估)版本。该版本同正式版本一样,但有一定的限制,最终生成的代码不能超过2KB,但用13于学习已足够。开发者还可到Keil公司网站申请免费的软件试用光盘。KeilµVision3内集成了功能强大源程序编辑器和调试器。编辑器允许用户在编辑源文件时就可设置程序调试断点,便于在程序调试过程中快速检查和修改程序,可像一般文本编辑器一样对源代码进行编辑。用户启动µVision3调试器之后,断点即被激活。断点可被设置为条件表达式、变量或存储器访问,断点被触发后,调试器的命令或调试功能即可执行,因此可在编辑器内调试程序,快速地检查和修改程序。还可在编辑器中选中变量和存储器来观察其值。并可以在双层窗口中显示,还可对其进行适当14的调整。此外,µVision3调试器具有符号调试特性以及历史跟踪,代码覆盖,复杂断点等功能。KeilµVision环境下还有串口调试器软件comdebug.exe,用于在电脑端能够看到单片机发出的数据,串口调试器软件无需安装,可直接运行这个软件。若读者需要最新版,可到有关搜索网站输入关键词“串口调试器”,找到一个合适的下载网站,可即下载“串口调试器”的最新版本。当然,使用Windows自带的“超级终端”也是不错的选择。15上述工作完成后,还有有关项目的设置,程序的编译,链接,调试。这些内容,可按照KeilµVision3开发环境的帮助功能。3.3C51语言程序设计基础在标准C的基础上了解掌握C51的数据类型和存储类型、基本运算与流程控制语句、C51语言构造数据类型、C51函数以及C51程序设计的其它问题,为C51程序设计打下基础。3.3.1C51语言中的数据类型与存储类型1.数据类型数据是单片机操作的对象,是具有一定格式的数字或数值,16数据的不同格式就称为数据类型。KeilC51支持的基本数据类型如表3-1所示。针对AT89S51单片机的硬件特点,C51在标准C的基础上,扩展了4种数据类型(表3-1中最后4行)。注意:扩展的4种数据类型,不能使用指针对它们存取。172.C51的扩展数据类型对扩展的4种数据类型说明。(1)位变量bitbit的值可以是1(true),也可以是0(false)。(2)特殊功能寄存器sfr特殊功能寄存器分布在片内数据存储区的地址单元80H~FFH之间,“sfr”数据类型占用一个内存单元。利用它可以访问AT89S51单片机内部的所有特殊功能寄存器。例如:sfrP1=0x90这一语句定义了P1端口在片内的寄存器,在程序后续的语句中可以用“P1=0xff”使P1的所有引脚输出为高电平之类的语句来操作特殊功能寄存器。19(3)特殊功能寄存器sfr16“sfr16”数据类型占两个内存单元。它用于操作占两个字节的特殊功能寄存器。例如:“sfr16DPTR=0x82”语句定义了片内16位数据指针寄存器DPTR,其低8位字节地址为82H,高8位字节地址为83H。(4)特殊功能位sbitsbit—片内特殊功能寄存器的可寻址位。例如:sfrPSW=0xd0;/*定义PSW寄存器地址为0xd0*/sbitPSW^2=0xd2;/*定义OV位为PSW.2*/符号“^”前是特殊功能寄存器的名字,“^”的后面数字是特殊功能寄存器可寻址位在寄存器中的位置,取值必须是0~7。20注意,不要把bit与sbit混淆。bit是定义普通的位变量,值只能是二进制的0或1。而sbit定义的是特殊功能寄存器的可寻址位,它的值是可进行位寻址的特殊功能寄存器的某位的绝对地址,例如,PSW寄存器OV位的绝对地址0xd2。3.数据存储类型在讨论C51的数据类型时,必须同时提及它的存储类型,以及它与51单片机存储器结构的关系,因为C51定义的任何数据类型必须以一定的方式定位在51单片机的某一存储区中,否则没有任何实际意义。51单片机有片内、外数据存储区,还有程序存储区。51单片机片内的数据存储区是可读写的,51单片机的衍生系列最多可21有256个字节的内部数据存储区,其中低128字节可直接寻址,高128字节(80H~FFH)只能间接寻址,从20H开始的16字节可位寻址。内部数据存储区可分为3个不同的数据存储类型:data、idata和bdata。访问片外数据存储区比访问片内数据存储区慢,因为片外数据存储区是通过数据指针加载地址来间接寻址访问的。C51提供两种不同数据存储类型xdata和pdata来访问片外数据存储区。程序存储区只能读不能写,可能在51单片机内部或者外部,或者外部和内部都有,由51单片机的硬件决定,C51提供了code存储类型来访问程序存储区。22C51存储类型与AT89S51单片机实际的存储空间的对应关系如表3-2所示。23下面对表3-2中的各种存储区作以说明。(1)DATA区。寻址是最快的,应该把经常使用的变量放在DATA区,但是DATA区的存储空间是有限的,D
本文标题:第3章 C51语言编程基础
链接地址:https://www.777doc.com/doc-3176286 .html