您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机第6章 C语言编程与应用
12020/2/282020年2月28日1时13分16.1概述6.251单片机C语言编写的一般方法6.3C51数据类型及在MCS-51中的存储方式6.4C51语言的程序结构6.5C语言在MCS-51单片机中的典型运用第6章C语言编程与应用22020/2/282020年2月28日1时13分26.1概述传统开发单片机系统主要用汇编语言编写系统程序。汇编语言的缺点:可读性和结构较差,可移植性也不好,跨硬件平台移植几乎不可能。采用汇编语言编写单片机应用程序的周期长,测试和排错比较困难,产品开发周期变长。为了提高编写系统和应用程序的效率,改善程序的可读性和可移植性,缩短产品开发周期,采用高级语言的开发平台来开发单片机系统已经成为时尚和趋势。基于高级语言开发平台进行单片机开发,具有开发速度快、语言简洁易读、可移植性好、可进行结构化程序设计和多人协同工作、可进行脱离硬件平台的软件仿真等优点。实践证明,采用高级语言开发单片机系统的效率要比用汇编语言的高几倍甚至几十倍。32020/2/282020年2月28日1时13分3单片机的高级语言包括:Basic语言、PL/M语言和C/C++语言。Basic语言主要应用在MCS-51系列单片机上,效果不是很理想,现在已经不再使用。PL/M语言对硬件的控制能力和代码效率都很好,但局限于Intel公司的单片机系列,移植性差。C/C++语言是目前单片机的主流编程语言。42020/2/282020年2月28日1时13分4单片机C语言编译器不仅把开发者的C语言编译成8051可以识别的机器码,更主要的是能够自动安排程序存储器的空间,分配8051内部RAM与外部RAM的空间、自动安排堆栈位置。这些事情都是汇编语言开发者必须自己作的。C51编译器还可以把不同函数的数据实行覆盖有效利用片上有限的RAM空间。一般情况下只懂C语言不懂得单片机的指令集的开发者也能够用C51编写完美的单片机程序。所以开发者学习单片机而不懂C语言将在激烈的市场竞争中处于十分不利的地位。52020/2/282020年2月28日1时13分51单片机应用系统开发的软硬件环境构成补充:单片机应用系统开发的软硬件环境当用户目标系统设计完成后,还需要应用软件支持,用户目标系统才能成为一个满足用户要求的单片机应用系统。但该用户目标系统不具备自开发能力,需要借助于单片机仿真器(也称单片机开发系统)完成该项工作。62020/2/282020年2月28日1时13分6一个典型的单片机系统开发环境组成如图所示。单片机系统开发环境组成72020/2/282020年2月28日1时13分72单片机应用系统开发工具选择原则全地址空间的仿真。不占用任何用户目标系统的资源。必须实现硬断点,并且具有灵活的断点管理功能。硬件实现单步执行功能。可跟踪用户程序执行。可观察用户程序执行过程中的变量和表达式。可中止用户程序的运行或用户程序复位。系统硬件电路的诊断与检查。支持汇编和高级语言源程序级调试。82020/2/282020年2月28日1时13分83使用JTAG界面单片机仿真开发环境JTAG仿真开发环境如图所示。在JTAG单片机仿真开发环境中,JTAG适配器提供了计算机通信口到单片机JTAG口的透明转换,并且不出借CPU和程序存储器给应用系统,使得仿真更加贴近实际目标系统。单片机内部已集成了基于JTAG协议调试和下载程序。92020/2/282020年2月28日1时13分9在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。ISP的实现一般需要很少的外部电路辅助实现,而IAP的实现更加灵活,通常可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序对内部的FLASH存储器编程。4单片机的在线编程102020/2/282020年2月28日1时13分106.251单片机C语言编写的一般方法KeelC51软件是目前最流行开发8051系列单片机的软件工具,这从近年来各单片机仿真机厂商纷纷宣布全面支持KeilC51即可看出。KeilC51提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(µVision3IDEIntegrationDevelopEntironment)将这些部份组合在一起。掌握这一软件的使用对于使用8051系列单片机的爱好者来说是十分必要的,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令开发者事半功倍。用C语言编写程序,离不开KeilC51软件!112020/2/282020年2月28日1时13分11µVision3IDE主要特性:µVision3IDE基于Windows的开发平台,包含一个高效的编辑器、一个项目管理器和一个MAKE工具。μVision3IDE支持所有的KeilC51工具,包括C编译器、宏汇编器、连接/定位器、目标代码到HEX的转换器。µVision3IDE内嵌多种符合当前工业标准的开发工具,可以完成从工程建立、管理、编译连接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程。122020/2/282020年2月28日1时13分12●集成开发环境●C51编译器和A51汇编器●LIB51库管理器●BL51链接器/定位器●µVision3软件调试器●µVision3IDE硬件调试器●RTX51实时操作系统µVision3IDE主要特性如下:132020/2/282020年2月28日1时13分136.2.1建立您的第一个KEILC51项目安装完keil软件后,用户可以双击桌面“μVision3”运行图标进入IDE环境。1.建立工程文件在项目开发中,并不是只有一个用C或汇编语言编写的源程序就行了的,还要为项目选择所用的CPU,Keil支持数百种CPU,而这些CPU的特性并不完全相同;还要确定编译、汇编、连接的参数,指定调试的方式,有一些项目还会有多个文件组成等。为了管理和使用方便,Keil使用工程(Project)这一概念,将上述参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译(汇编)和连接等操作。142020/2/282020年2月28日1时13分14(1)点击“Project→NewProject...”菜单,出现一个对话框,选择工程要保存的路径,输入工程文件名。为了方便管理,通常我们将一个工程放在一个独立文件夹下,如保存到exam_1文件夹,工程文件的名字为exam_1,如下图所示,然后单击[保存]按钮。工程建立后,此工程名变为exam_l.uv2。152020/2/282020年2月28日1时13分15(2)点击“保存”按钮后,出现下图所示对话框,这个对话框要求选择目标CPU(即所用芯片的型号),Keil支持的CPU很多,Keil软件的关键是程序代码的编写,而非用户选择什么硬件,我们选择Atmel公司的89C52芯片。162020/2/282020年2月28日1时13分16点击ATMEL前面的“+”号,展开该层,点击其中的89C52。出现的界面上页图所示,右边【Description】栏里是对该型号单片机的基本说明,我们可以单击其他型号单片机浏览一下其功能特点,然后再点击“确定”按钮,弹出将8051初始化代码复制到项目中的询问窗口,如下图所示。172020/2/282020年2月28日1时13分17(3)单击“否”按钮,出现下图所示的窗口。如果需要重命名Target1和SourceGroup1,在左侧ProjectWorkspace区用鼠标左键选中Target1,再用鼠标左键单击Target1,即可重新命名Target1。用同样的方法可以修改SourceGroup1,这里对此不做修改。182020/2/282020年2月28日1时13分18到此为止,我们还未建立好一个完整的工程,虽然工程名有了,但工程当中还没有源文件及代码,接下来我们添加文件及代码。192020/2/282020年2月28日1时13分19(4)使用菜单“File→New”或者点击工具栏的新建文件按钮,新建文件后窗口界面如图2-6所示。202020/2/282020年2月28日1时13分20此时光标在编辑窗口中闪烁,可以输入用户的应用程序,但此时这个新建文件与我们刚才建立的工程还没有直接的联系,单击保存,窗口界面如图2-7所示,在【文件名(N)】编辑框中,输入要保存的文件名,同时必须输入正确的扩展名。注意,如果用C语言编写程序,则扩展名必须为.c;如果用汇编语言编写程序,则扩展名必须为.asm。这里的文件名不一定要和工程名相同,用户可以随意填写文件名,然后单击【保存】按钮。212020/2/282020年2月28日1时13分21(5)回到编辑界面,单击【Target1】前面的“+”号,然后在【SourceGroup1】选项上,单击右键,弹出如下图所示的菜单。然后选择【AddFilestoGroup'SourceGroup1'】菜单项,对话框如图2-9所示。222020/2/282020年2月28日1时13分22选中文件后的对话框232020/2/282020年2月28日1时13分23图2-10将文件加入工程后的屏幕窗口选中【exam_1.c】,单击【Add】按钮,再单击【Close】按钮,然后我们再单击左侧【SourseGroup1】前面的“+”号,屏幕窗口如图2-10所示242020/2/282020年2月28日1时13分24点亮一个二极管的控制系统硬件电路复位电路晶振电路P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7RXD(P3.0)TXD(P3.1)T0(P3.4)T1(P3.5)(P3.2)INT0(P3.3)INT1(P3.7)RD(P3.6)WRVSSX1X2RESETVCC5V3301234567891011121314151617181920403938373635343332313029282726252423222110μF4.7k12MHz30pF30pFPSENALE/PROGEA/Vpp5V2k5VSTC89C52252020/2/282020年2月28日1时13分25(6)在编辑窗口中输入点亮一个发光二极管的C语言源程序:#includereg52.h//52系列单片机头文件sbitled1=P1^0;//声明单片机P1口的第一位voidmain(){led1=0;//*点亮LED发光二极管while(1);//程序停止到这里}262020/2/282020年2月28日1时13分26程序输入完毕后保存,界面如下图。272020/2/282020年2月28日1时13分27程序输入完毕后保存,界面如下图。通过以上(1)~(6)步我们学习了如何在Keil编译环境下建立一个工程。282020/2/282020年2月28日1时13分282.工程的设置见实验指导书中实验一292020/2/282020年2月28日1时13分293.软件仿真调试见实验指导书中实验一302020/2/282020年2月28日1时13分30编写并调试让二极管以间隔1s的时间亮灭闪烁的程序。#includereg52.h//52系列单片机头文件sbitled1=P1^0;//声明单片机P1口的第一位unsignedinti,j;//声明无符号整型变量i,jvoidmain()//主函数{while(1)//大循环{led1=0;//点亮LED发光二极管for(i=1000;i0;i--)//延时for(j=110;j0;j--);//le
本文标题:单片机第6章 C语言编程与应用
链接地址:https://www.777doc.com/doc-4045151 .html