1、第一章第一章 嵌入式控制系统概论嵌入式控制系统概论【本章知识架构本章知识架构】【本章教学目标和要求本章教学目标和要求】了解单片机、嵌入式控制器、嵌入式控制系统的定义了解单片机、嵌入式控制器、嵌入式控制系统的定义 学会嵌入式开发环境学会嵌入式开发环境KEIL C的安装,并在自己的计算的安装,并在自己的计算 机上安装一种嵌入式开发环境机上安装一种嵌入式开发环境 熟练掌握开发环境的使用,了解系统软件资源并学会熟练掌握开发环境的使用,了解系统软件资源并学会使用使用 熟练掌握项目的编辑、编译、联接和调试方法熟练掌握项目的编辑、编译、联接和调试方法提示:本章内容对后面的学习很重提示:本章内容对后面的学习很
2、重要,要熟练掌握,特别是开发环境要,要熟练掌握,特别是开发环境的使用和项目的编辑、编译、联接的使用和项目的编辑、编译、联接和调试方法和调试方法1.1单片机和嵌入式控制系统的定义、单片机和嵌入式控制系统的定义、嵌入式系统的分类嵌入式系统的分类 单片机就是在一片半导体硅片上集成了中央处理单单片机就是在一片半导体硅片上集成了中央处理单元元(CPU)、存储器(、存储器(RAM/ROM)和各种)和各种I/O接口的微接口的微型计算机。这样一块集成电路芯片具有一台微型计型计算机。这样一块集成电路芯片具有一台微型计算机的功能,因此被称为单片微型计算机,简称单算机的功能,因此被称为单片微型计算机,简称单片机。片
3、机。有些单片机功能比较齐全,我们称之为通用单片机;有些单片机功能比较齐全,我们称之为通用单片机;有些单片机是专门为某一应用领域研制的,突出某有些单片机是专门为某一应用领域研制的,突出某一功能,例如专门的数控芯片、数字信号处理芯片一功能,例如专门的数控芯片、数字信号处理芯片等,我们称之为专用单片机。有时我们也把这两种等,我们称之为专用单片机。有时我们也把这两种单片机统称为微处理器。单片机统称为微处理器。单片机主要应用在测试和控制领域,由于单片机在单片机主要应用在测试和控制领域,由于单片机在使用时,通常处于测试和控制领域的核心地位并嵌使用时,通常处于测试和控制领域的核心地位并嵌入其中,因此我们也常
4、把单片机称为嵌入式控制器入其中,因此我们也常把单片机称为嵌入式控制器(Embedded MicroController Unit),把嵌入某种),把嵌入某种微处理器或单片机的测试和控制系统称为嵌入式控微处理器或单片机的测试和控制系统称为嵌入式控制系统(制系统(Embedded Control System)。)。在本书后面的叙述中单片机和嵌入式控制器意义是在本书后面的叙述中单片机和嵌入式控制器意义是相同的。相同的。嵌入式控制系统在航空航天、机械电子、家用电器、嵌入式控制系统在航空航天、机械电子、家用电器、自动控制等各个领域都有广泛应用,特别是家用电自动控制等各个领域都有广泛应用,特别是家用电器
5、领域是嵌入式控制系统最大的应用领域,器领域是嵌入式控制系统最大的应用领域,MP3、MP4、MP5、数码像机、扫描仪、个人、数码像机、扫描仪、个人PC、车载电、车载电视、视、DVD、PDA(掌上电脑掌上电脑),到处都可以看到嵌入式,到处都可以看到嵌入式控制系统的应用。控制系统的应用。随着超大规模集成电路工艺和集成制造技术的不断随着超大规模集成电路工艺和集成制造技术的不断完善,单片机的硬件集成度也在不断提高,已经出完善,单片机的硬件集成度也在不断提高,已经出现了能满足各种不同需要、具有各种特殊功能的单现了能满足各种不同需要、具有各种特殊功能的单片机。在片机。在8位单片机得到广泛应用的基础上,位单片
6、机得到广泛应用的基础上,16位位单片机和单片机和32位单片机也应运而生,特别是以位单片机也应运而生,特别是以ARM技技术为基础的术为基础的32位精减指令系统单片机(位精减指令系统单片机(RISC Microprocessor)的出现,由于其性能优良、价格低)的出现,由于其性能优良、价格低廉,大有取代廉,大有取代16位单片机而成为高挡主流机型的趋位单片机而成为高挡主流机型的趋势。势。嵌入式控制系统由于其内核嵌入的微处理器不同,嵌入式控制系统由于其内核嵌入的微处理器不同,在应用上大致分为两个层次,在系统简单、要求不在应用上大致分为两个层次,在系统简单、要求不高,成本低的应用领域,大多采用以高,成本
7、低的应用领域,大多采用以MCS-51为代表为代表的的8位单片机。位单片机。随着嵌入式控制系统与随着嵌入式控制系统与Internet的逐步结合,的逐步结合,PDA、手机、路由器、调制解调器等复杂的高端应用对手机、路由器、调制解调器等复杂的高端应用对嵌入式控制器提出了更高的要求,在少数高端应嵌入式控制器提出了更高的要求,在少数高端应用领域以用领域以ARM技术为基础的技术为基础的32位精减指令系统单位精减指令系统单片机得到越来越多的青睐。嵌入式控制系统在高片机得到越来越多的青睐。嵌入式控制系统在高端应用领域还分为代嵌入式操作系统支持和不代端应用领域还分为代嵌入式操作系统支持和不代嵌入式操作系统支持两
8、种情况。嵌入式操作系统支持两种情况。1.2 MCS-51单片机在嵌入式控制系统单片机在嵌入式控制系统中的地位和作用中的地位和作用 1980年,年,Intel公司在公司在MCS-48单片机基础上推出单片机基础上推出MCS-51单片机,单片机,MCS-51单片机包括三个基本型单片机包括三个基本型8031、8051、8751,还包括三个,还包括三个CMOS工艺的低功耗型工艺的低功耗型80C31、80C51、87C51。虽然它们是虽然它们是8位单片机,但是它们品种多,兼容位单片机,但是它们品种多,兼容性好,功能强,价格低廉,性能稳定和使用方便,性好,功能强,价格低廉,性能稳定和使用方便,特别是设计和应
9、用资料齐全,受到广大工程技术人特别是设计和应用资料齐全,受到广大工程技术人员的青睐,成为我国应用最为广泛的机种。在今后员的青睐,成为我国应用最为广泛的机种。在今后相当一段时间,相当一段时间,MCS-51单片机还是嵌入式控制系统单片机还是嵌入式控制系统的主流机型。的主流机型。由于由于MCS-51单片机技术先进,性能稳定,世界上许单片机技术先进,性能稳定,世界上许多大的半导体公司也在根据多大的半导体公司也在根据Intel公司技术生产公司技术生产MCS-51单片机或改进型单片机或改进型MCS-51单片机。因此,单片机。因此,MCS-51单单片机也成为片机也成为8位单片机的实际技术标准,也是嵌入位单片
10、机的实际技术标准,也是嵌入式控制系统中使用最多的嵌入式控制器。式控制系统中使用最多的嵌入式控制器。在计算机技术飞跃发展的今天,在计算机技术飞跃发展的今天,16位和位和32位单片机位单片机已经出现并逐步得到推广应用,但已经出现并逐步得到推广应用,但MCS-51单片机的单片机的应用还是非常广泛。应用还是非常广泛。MCS-51单片机的设计思想在单片机的设计思想在16位和位和32位单片机中得到了进一步的继承和发展。位单片机中得到了进一步的继承和发展。我们掌握了我们掌握了MCS-51单片机的单片机的C语言程序设计方法,语言程序设计方法,可以完全满足一般嵌入式控制系统的设计要求,可以完全满足一般嵌入式控制
11、系统的设计要求,因为嵌入式控制系统大多具有小、巧、轻、灵、因为嵌入式控制系统大多具有小、巧、轻、灵、薄的特点,中小简单系统占嵌入式控制系统的绝薄的特点,中小简单系统占嵌入式控制系统的绝大多数,少数高端应用我们遇到较少。同时掌握大多数,少数高端应用我们遇到较少。同时掌握了了8位嵌入式控制系统的设计方法为进一步学习位嵌入式控制系统的设计方法为进一步学习16位和位和32嵌入式控制系统打下基础。嵌入式控制系统打下基础。1.3 嵌入式控制系统的研究方法嵌入式控制系统的研究方法 1.3.1 交叉编译环境交叉编译环境Keil C 做为嵌入式控制器的单片机,不管是做为嵌入式控制器的单片机,不管是8位单片机还是
12、位单片机还是16位单位单片机或片机或32位单片机,由于受其本身资源限制,其应用程序都位单片机,由于受其本身资源限制,其应用程序都不能在其本身上开发,我们开发其应用程序,还需要一台通不能在其本身上开发,我们开发其应用程序,还需要一台通用计算机,如常用的用计算机,如常用的IBM-PC机或兼容机,机或兼容机,Mindows95/98/2000或或XP操作系统,操作系统,16M以上内存,以上内存,20M以以上硬盘内存空间(运行交叉编译环境上硬盘内存空间(运行交叉编译环境Keil C最低配置)。我最低配置)。我们也称这台通用计算机为们也称这台通用计算机为“宿主机宿主机”,称做为嵌入式控制器,称做为嵌入式
13、控制器的单片机为的单片机为“目标机目标机”,应用程序在,应用程序在“宿主机宿主机”上开发,在上开发,在“目标机目标机”上运行。上运行。“目标机目标机”和和“宿主机宿主机”之间利用计算之间利用计算机并口或机并口或USB口通过一台叫口通过一台叫“仿真器仿真器”的设备相连,编译好的设备相连,编译好的计算机可以识别的目标程序(二进制代码程序)可以从的计算机可以识别的目标程序(二进制代码程序)可以从“宿主机宿主机”传到传到“目标机目标机”,这也叫程序下载,也可以从,这也叫程序下载,也可以从“宿主机宿主机”传到传到“目标机目标机”,叫程序上传。,叫程序上传。应用程序通过应用程序通过“仿真器仿真器”的下载和
14、上传,在的下载和上传,在“宿主宿主机机”上反复修改,这个过程叫上反复修改,这个过程叫“调试调试”。调试好的。调试好的应用程序,在应用程序,在“宿主机宿主机”上编译成上编译成“目标机目标机”可以可以直接执行的机器码文件,通过一台叫直接执行的机器码文件,通过一台叫“固化器固化器”的的设备下载并固化到设备下载并固化到“目标机目标机”的程序存储器中(的程序存储器中(8位单片机常用的程序存储器是位单片机常用的程序存储器是EPROM或或Flash),整),整个下载过程,叫烧片,也叫程序固化。个下载过程,叫烧片,也叫程序固化。程序固化是单片机开发的最后一步,以后程序固化是单片机开发的最后一步,以后“宿主机宿
15、主机”和和“目标机目标机”就可以分离,就可以分离,“宿主机宿主机”任务完成。任务完成。“目标机目标机”就可以独立执行嵌入式控制器的任务。就可以独立执行嵌入式控制器的任务。嵌入式控制系统开发过程如图嵌入式控制系统开发过程如图1-1所示。所示。通过以上叙述可知,在通过以上叙述可知,在“宿主机宿主机”上运行的开发工上运行的开发工具软件的功能非常重要,我们也称这套开发工具软具软件的功能非常重要,我们也称这套开发工具软件为交叉编译环境或集成开发环境,交叉编译环境件为交叉编译环境或集成开发环境,交叉编译环境首先应具有类似首先应具有类似“Word”的功能,对我们用的功能,对我们用C语言编语言编写的程序进行编
16、辑,同时它还具有调试和编译功能,写的程序进行编辑,同时它还具有调试和编译功能,可以把调试好的应用程序编译成可以把调试好的应用程序编译成“目标机目标机”可以直可以直接执行的机器码文件。接执行的机器码文件。在我国,在我国,MCS-51单片机的开发多使用德国单片机的开发多使用德国Keil公司公司的的Vision2/3或南京伟福的或南京伟福的Wave6000,Vision2/3也叫也叫Keil C51,是一款非常优秀的,是一款非常优秀的MCS-51开发工具,它开发工具,它功能强、使用方便,特别是运行稳定、抗干扰和防功能强、使用方便,特别是运行稳定、抗干扰和防病毒能力强给使用者留下深刻印象。病毒能力强给
17、使用者留下深刻印象。在北京大学出版社网站在北京大学出版社网站http:/可下可下载本书免费学习参考资料,内有载本书免费学习参考资料,内有Keil C,供读者下载,供读者下载学习使用。学习使用。Wave6000可从南京伟福官方网站可从南京伟福官方网站http:/www.wave-免费下载。免费下载。温鑫提示温鑫提示编辑和编译是两个不同的概念,编辑和编译是两个不同的概念,编辑具有拷贝、粘贴、剪切等类似编辑具有拷贝、粘贴、剪切等类似Word功功能,而编译具有将能,而编译具有将C语言文件翻译成计算机语言文件翻译成计算机可以识别的机器码文件、并对程序进行语法可以识别的机器码文件、并对程序进行语法检查的功
18、能检查的功能 1.3.2 Keil C51的安装的安装 打开单片机编译器文件夹,再打开打开单片机编译器文件夹,再打开setup子文件夹,子文件夹,出现图出现图1-2所示画面,选中所示画面,选中setup.exe图标双击,出现图标双击,出现图图1-3所示选择安装类型对话框,我们第一次安装,所示选择安装类型对话框,我们第一次安装,选第一项。按选第一项。按Next键,出现图键,出现图1-4所示选择安装版本所示选择安装版本对话框,我们选对话框,我们选Full Version,系统就开始安装,确,系统就开始安装,确定安装路径定安装路径C:Keil和同意版权协议后,系统还要产和同意版权协议后,系统还要产品
19、系列号,系列号在品系列号,系列号在UP51V701.TXT文件夹中。文件夹中。接着我们在图接着我们在图1-5中击中击Browse键,在上一级文件夹中键,在上一级文件夹中找到找到PK51专业开发软件路径专业开发软件路径C51addon文件夹选中并文件夹选中并确定,出现图确定,出现图1-6所示画面,继续击所示画面,继续击Next键就可一步键就可一步步完成安装。步完成安装。图图1-2 Keil C安装初始画面安装初始画面图图1-3 选择安装类型选择安装类型图图1-4选择安装版本选择安装版本图图1-5 安装安装PK51专业开发软件专业开发软件图图1-6 PK51专业开发软件路径专业开发软件路径1.4
20、程序的编辑、编译、调试和运行程序的编辑、编译、调试和运行 1.4.1 建立项目建立项目 MCS-51单片机程序的编辑和调试均在交叉编译环单片机程序的编辑和调试均在交叉编译环境境Keil C51中完成,非常方便。中完成,非常方便。Keil C的快捷键如图的快捷键如图1-7所示,可以把它放在桌面上,使用方便。双击所示,可以把它放在桌面上,使用方便。双击此图标,就会出现图此图标,就会出现图1-8所示交叉编译环境所示交叉编译环境Keil C的主界面,的主界面,MCS-51单片机程序的编辑和调试均在单片机程序的编辑和调试均在此界面上完成,今后我们会经常在此界面上工作,此界面上完成,今后我们会经常在此界面
21、上工作,Keil C在对程序进行编辑、编译和调试时都是以在对程序进行编辑、编译和调试时都是以“项项目目”为单位来进行的,在一个项目中可以包含后缀为单位来进行的,在一个项目中可以包含后缀为为.C的的C语言源文件、后缀为语言源文件、后缀为.h的的C语言头文件、后语言头文件、后缀为缀为.A的汇编语言文件、后缀为的汇编语言文件、后缀为.o的机器码文件(的机器码文件(C语言文件经编译后形成的文件)、后缀为语言文件经编译后形成的文件)、后缀为.LIB的库的库文件(一个库文件中保存同一类功能的一些文件,文件(一个库文件中保存同一类功能的一些文件,这些文件还可以是后缀为这些文件还可以是后缀为.C的的C语言源文
22、件、后缀语言源文件、后缀为为.h的的C语言头文件、后缀为语言头文件、后缀为.A的汇编语言文件、后的汇编语言文件、后缀为缀为.o的机器码文件,还可以是另一个后缀为的机器码文件,还可以是另一个后缀为.LIB的的库文件)。库文件)。Keil C在对在对“项目项目”进行编辑时,会根据每一个程序进行编辑时,会根据每一个程序的后缀调用不同的编译工具分别把它们转换为后缀的后缀调用不同的编译工具分别把它们转换为后缀为为.o一个一个的机器码文件,然后再调用连接工具一个一个的机器码文件,然后再调用连接工具文件文件Link根据根据“项目项目”结构把它们连接成一个统一结构把它们连接成一个统一的后缀为的后缀为.exe的
23、可执行文件。的可执行文件。小贴示:我们的项目可能很大,程序是由几个工程师或不同小贴示:我们的项目可能很大,程序是由几个工程师或不同公司工程师编写的,而且使用的编程语言不尽相同,但都可公司工程师编写的,而且使用的编程语言不尽相同,但都可以使用以使用Keil C分别进行编辑,形成各自后缀为分别进行编辑,形成各自后缀为.o的机器码文件,的机器码文件,然后统一进行连接即可。然后统一进行连接即可。因此,使用因此,使用Keil C进行嵌入式控制系统程序开发,首进行嵌入式控制系统程序开发,首先要建立一个项目,在开发环境主菜单中,选先要建立一个项目,在开发环境主菜单中,选Project/New Project
24、单击,就会出现图单击,就会出现图1-9所示建立所示建立项目对话框,我们给项目起个名字:项目对话框,我们给项目起个名字:HELLO,名字,名字的后缀的后缀Uv2是系统自动加的,表示这是是系统自动加的,表示这是Keil C的一个的一个项目。项目。图图1-8 Keil C的集成开发环境的集成开发环境 选好保存路径,单击保存即完成建立一个项目的工选好保存路径,单击保存即完成建立一个项目的工作。之后出现选择设备对话框,如图作。之后出现选择设备对话框,如图1-10所示,就所示,就是请我们为项目选择一款单片机,假如我们选是请我们为项目选择一款单片机,假如我们选Inter公司公司8031A,就会出现设备描述对
25、话框,图,就会出现设备描述对话框,图1-11所所示,确认后返回主界面,即完成了建立一个项目的示,确认后返回主界面,即完成了建立一个项目的工作。工作。图图1-9 建立建立Keil C的一个项目的一个项目图图1-10选择设备对话框选择设备对话框图图1-11 设备功能描述对话框设备功能描述对话框 1.4.2 项目的运行模式项目的运行模式 Keil C为了使项目能在最优化情况下运行,对项目进为了使项目能在最优化情况下运行,对项目进行了分类,编译后代码小于行了分类,编译后代码小于2K的项目为小模式的项目为小模式(Small模式),其它为中模式(模式),其它为中模式(Compact模式)或模式)或大模式(
26、大模式(Large模式)。模式)。单片机虽然功能很强,但本身资源毕竟有限,特别单片机虽然功能很强,但本身资源毕竟有限,特别是片上数据存储器,只有是片上数据存储器,只有128B(51系列)或系列)或256B(52系列),有时候我们必须要在片外对数据存储系列),有时候我们必须要在片外对数据存储器进行扩展。但是在项目为小模式时,只使用片上器进行扩展。但是在项目为小模式时,只使用片上数据存储器就满足系统要求了,程序用到的变量或数据存储器就满足系统要求了,程序用到的变量或函数调用时用到的参数可放在片上数据存储器器中,函数调用时用到的参数可放在片上数据存储器器中,这种情况下项目占用系统资源少、运行速度快、
27、代这种情况下项目占用系统资源少、运行速度快、代码效率最高。在大学生电子设计大赛或教学实验系码效率最高。在大学生电子设计大赛或教学实验系统中常使用这种模式。统中常使用这种模式。虽然小模式占用系统资源少、运行速度快,但代码虽然小模式占用系统资源少、运行速度快,但代码容量太小,在工程上一般采用大模式(容量太小,在工程上一般采用大模式(Large模式)。模式)。大模式允许数据存储器和程序代码分别为大模式允许数据存储器和程序代码分别为64K,完全,完全可以满足嵌入式控制系统的要求。中模式实际使用可以满足嵌入式控制系统的要求。中模式实际使用较少,本书不做介绍。我们后面的例子程序均采用较少,本书不做介绍。我
28、们后面的例子程序均采用大模式。大模式。在编译项目前,要确定使用的模式,可按如下步骤在编译项目前,要确定使用的模式,可按如下步骤进行:在主界面中,右击进行:在主界面中,右击Target1(对象(对象1)通过)通过Options for target”target1”(对象对象1设置)对话框,设置)对话框,设置设置Memory为大模式为大模式Large“Variables”in xdata(大(大模式,变量放片外数据存储器),如图模式,变量放片外数据存储器),如图1-12示。示。1.4.3 项目的编译模式项目的编译模式 前面讲过,前面讲过,Keil C可以将项目编译成后缀为可以将项目编译成后缀为.
29、o的机器的机器码码(也叫目标码也叫目标码)文件,也可以将多个目标码文件通文件,也可以将多个目标码文件通过过Link连接成一个后缀为连接成一个后缀为.exe的可执行文件。的可执行文件。如果将项目编译成后缀为如果将项目编译成后缀为.o的机器码文件,不能直的机器码文件,不能直接执行,以后还要和其它后缀为接执行,以后还要和其它后缀为.o的机器码文件通的机器码文件通过过Link连接成一个后缀为连接成一个后缀为.exe的可执行文件才可执行。的可执行文件才可执行。一般我们的项目都较小,希望将项目编译成后缀一般我们的项目都较小,希望将项目编译成后缀为为.o的机器码文件后,编译器直接调用的机器码文件后,编译器直
30、接调用Link将其连将其连接成后缀为接成后缀为.exe的可执行文件,这可按下如下步骤的可执行文件,这可按下如下步骤进行。进行。在在Options for target”target1”(对象对象1设置)对话框设置)对话框中,选中中,选中Output属性页,然后勾选属性页,然后勾选Debug Information和和Create Hex Files选项即可,如图选项即可,如图1-13示。示。至此,为项目选设备和该项目编译器设置完成。至此,为项目选设备和该项目编译器设置完成。图图1-13 产生产生16进制输出文件对话框进制输出文件对话框 1.4.4 项目的调试项目的调试 以上工作确认无误后返回主
31、界面,在主界面中,右以上工作确认无误后返回主界面,在主界面中,右击击Source Group1,出现图,出现图1-14添加文件对话框,选添加文件对话框,选Add Files to Group Source Group1,把,把C语言源文件、语言源文件、头文件或汇编源文件、机器码文件、库文件加入项头文件或汇编源文件、机器码文件、库文件加入项目中。目中。提示:提示:如果我们使用如果我们使用Keil C编译器,编译器,项目文件项目文件的后缀是的后缀是.Uv2;如果使用国产;如果使用国产WAVE 6000编译编译器,项目文件的后缀是器,项目文件的后缀是.PRJ,后缀是建立项目,后缀是建立项目时系统自动
32、加的。时系统自动加的。在项目中添加文件时没必要将文件放在一起,只在项目中添加文件时没必要将文件放在一起,只要按提示把每个文件打开即可,要按提示把每个文件打开即可,Keil C在编译时在编译时会按路径找到每个文件并分别进行编译。会按路径找到每个文件并分别进行编译。特别注意,项目中只有一个文件时也要进行连接特别注意,项目中只有一个文件时也要进行连接图图1-14 在项目中添加文件对话框在项目中添加文件对话框 现在我们打开一个已建立好的项目,简述一下程序现在我们打开一个已建立好的项目,简述一下程序的调试过程。的调试过程。在主界面击在主界面击Project/Open Project,在对话框中打开,在对
33、话框中打开C:/Keil/C51/EXAMPLES/HELLO.Uv2项目,就会出现项目,就会出现图图1-15所示程序调试画面。画面分四部分,最上面所示程序调试画面。画面分四部分,最上面是主菜单和快捷键,左面是项目工作区,显示项目是主菜单和快捷键,左面是项目工作区,显示项目结构、帮助文档资料等。中间部分则是程序编辑区,结构、帮助文档资料等。中间部分则是程序编辑区,在项目工作区双击某个文件,该文件就会在程序编在项目工作区双击某个文件,该文件就会在程序编辑区打开,借助于主菜单辑区打开,借助于主菜单(主要是主要是Edit)和快捷键就可和快捷键就可以对该文件进行编辑,以对该文件进行编辑,Keil C的
34、编辑器功能非常强,的编辑器功能非常强,类似小型类似小型Word。图图1-15 程序的编辑环境程序的编辑环境程序编辑结束,通过程序编辑结束,通过 三个快捷键将当前正在调试三个快捷键将当前正在调试的文件进行编译,或连接形成机器可执行的的文件进行编译,或连接形成机器可执行的exe文件。其中文件。其中键键 只将当前正在调试的文件进行编译,键只将当前正在调试的文件进行编译,键 仅对修改过仅对修改过的文件进行编译,它们只生成目标文件,并对项目中的每个的文件进行编译,它们只生成目标文件,并对项目中的每个文件进行语法检查,如果发现错误会在输出拦中给出提示。文件进行语法检查,如果发现错误会在输出拦中给出提示。键
35、键 对全部文件进行编译,连接,形成机器可执行的对全部文件进行编译,连接,形成机器可执行的exe文文件。在编译过程种我们项目如果较小,常直接按件。在编译过程种我们项目如果较小,常直接按 键来加快键来加快编译速度。编译速度。形成形成exe文件后,还要对文件后,还要对exe进行调试,反复修改,才能最后进行调试,反复修改,才能最后形成正确程序。形成正确程序。exe文件的调试也在此环境中完成,单击快捷键图标文件的调试也在此环境中完成,单击快捷键图标 ,会,会出现图出现图1-16的的exe文件调试界面。文件调试界面。图图1-16 EXE文件调试环境文件调试环境 调试环境主要功能有连续执行程序、单步执行程序
36、调试环境主要功能有连续执行程序、单步执行程序并进入函数内部、单步执行程序不进入函数内部,并进入函数内部、单步执行程序不进入函数内部,仅把函数当成一条语句、执行到光标处等功能,还仅把函数当成一条语句、执行到光标处等功能,还可在程序运行中对某些变量和存储器跟踪观察、显可在程序运行中对某些变量和存储器跟踪观察、显示反汇编结果等,如图示反汇编结果等,如图1-17所示。所示。还可在程序一处或多处设置断点,使程序执行到断还可在程序一处或多处设置断点,使程序执行到断点处停止,也可取消一处或多处已设置的断点,还点处停止,也可取消一处或多处已设置的断点,还可在程序运行中对中断、可在程序运行中对中断、I/O口、串
37、口、定时器状态口、串口、定时器状态进行观察等,如图进行观察等,如图1-18所示。所示。嵌入式开发基础是一门实践性非常强的课程,在强调理论课嵌入式开发基础是一门实践性非常强的课程,在强调理论课学习的同时,必需安排一定的实验课,如:广州周立功公司学习的同时,必需安排一定的实验课,如:广州周立功公司DP-51PRO单片机仿真实验仪,南京伟福公司的单片机仿真实验仪,南京伟福公司的LAB6000都是都是比较好的教学实验系统。比较好的教学实验系统。温馨提示:温馨提示:交叉开发环境主要功能还有许多,这里只讲了最常用的。掌握了这些交叉开发环境主要功能还有许多,这里只讲了最常用的。掌握了这些功能就可完全满足系统
38、开发任务。功能就可完全满足系统开发任务。只有通过经常使用,才能熟连掌握这些功能。本书有配套实验讲义可只有通过经常使用,才能熟连掌握这些功能。本书有配套实验讲义可在北京大学出版社网站下载使用。如没有教学实验系统,使用讲义中在北京大学出版社网站下载使用。如没有教学实验系统,使用讲义中例子程序利用例子程序利用Keil C也可先做软件模拟,练习编程也可先做软件模拟,练习编程如没有教学实验系统,可先进行软件模拟,练好编程。如没有教学实验系统,可先进行软件模拟,练好编程。1.5 系统软件资源系统软件资源 KEIL C 除给我们提供非常丰富的编辑和编译工具外,还给我除给我们提供非常丰富的编辑和编译工具外,还
39、给我们提供了一些非常宝贵的库函数,这些库函数是以头文件的们提供了一些非常宝贵的库函数,这些库函数是以头文件的形式给出的。形式给出的。每个头文件中都含有几个常用的函数,如果我们使用其中的每个头文件中都含有几个常用的函数,如果我们使用其中的函数,可采用预处理命令函数,可采用预处理命令#include将有关的头文件包含进来。将有关的头文件包含进来。使用库函数可以大大简化用户的程序工作从而提高编程效率,使用库函数可以大大简化用户的程序工作从而提高编程效率,由于由于MCS-51 系列单片机本身的特点,某些库函数的参数和系列单片机本身的特点,某些库函数的参数和调用格式与调用格式与ANSIC标准有所不同。如
40、果在调用一个函数过程标准有所不同。如果在调用一个函数过程中又出现了直接或间接调用该函数本身,则称为函数的递归中又出现了直接或间接调用该函数本身,则称为函数的递归调用。并不是所有的函数都可以递归调用,我们称能进行递调用。并不是所有的函数都可以递归调用,我们称能进行递归调用的函数具有再入属性(归调用的函数具有再入属性(reentrant)。)。1.5.1 寄存器库函数寄存器库函数reg51.h/reg52.h在在reg51.h头文件中定义了头文件中定义了MCS-51、reg52.h的头的头文件中定义了文件中定义了MCS-52的所有特殊功能寄存器和寄存的所有特殊功能寄存器和寄存器相应的位,定义时都用
41、大写字母。当在程序中把器相应的位,定义时都用大写字母。当在程序中把寄存器库函数寄存器库函数reg51.h或或reg52.h包含后,在程序中就包含后,在程序中就可以直接使用可以直接使用MCS-51或或MCS-52的特殊功能寄存器和的特殊功能寄存器和寄存器相应的位,引用时都用大写字母。寄存器相应的位,引用时都用大写字母。因我们经常使用因我们经常使用MCS-52的兼容机型的兼容机型89C52,所以,所以引用引用reg52.h即可。即可。1.5.2字符函数字符函数ctype.h 1.函数原型:函数原型:bit isalnum(unsigned char);再入属性:再入属性:reentrant功能:检
42、查参数字符是否为英文字母,是则返回功能:检查参数字符是否为英文字母,是则返回1,否则返,否则返回回0。2.函数原型:函数原型:bit isalnum(char c)再入属性:再入属性:reentrant功能:检查参数字符是否为英文字母或数字字符,是则返回功能:检查参数字符是否为英文字母或数字字符,是则返回1,否则返回,否则返回0。3.函数原型:函数原型:bit iscntrl(unsigned char);再入属性:再入属性:reentrant功能:检查参数字符是否在功能:检查参数字符是否在0 x000 x7f之间或等于之间或等于0 x7f,如果,如果是则返回是则返回1,否则返回,否则返回0。
43、4.函数原型:函数原型:bit isdigit(unsigned char);再入属性:再入属性:reentrant功能:检查参数字符是否为数字字符,如果是则返回功能:检查参数字符是否为数字字符,如果是则返回1,否,否则返回则返回0。5.函数原型:函数原型:bit isgraph(unsigned char);再入属性:再入属性:reentrant功能:检查参数字符是否为可打印字符,可打印字符的功能:检查参数字符是否为可打印字符,可打印字符的ASCII值为值为0 x210 x7e,如果是,如果是则返回则返回1,否则返回,否则返回0。6.函数原型:函数原型:bit isprint(char c)
44、;再入属性:再入属性:reentrant功能:除了与功能:除了与isgraph相同之外,还接收空格符(相同之外,还接收空格符(0 x20););7.函数原型:函数原型:bit ispunct(char c);再入属性:再入属性:reentrant功能:检查参数字符是否为标点、空格和格式字符,如果是则功能:检查参数字符是否为标点、空格和格式字符,如果是则返回返回1,否则返回,否则返回0。8.函数原型:函数原型:bit islower(char c);再入属性:再入属性:reentrant功能:检查参数字符是否为小写英文字母,如果是则返回功能:检查参数字符是否为小写英文字母,如果是则返回1,否则返
45、回否则返回0。9函数原型:函数原型:bit isupper(char c);再入属性:再入属性:reentrant功能:检查参数字符是否大写英文字母,如果是则返回功能:检查参数字符是否大写英文字母,如果是则返回1,否则返回否则返回0。10.函数原型:函数原型:bit isspace(char c);再入属性:再入属性:reentrant功能:检查参数字符是否为下列之一:空格、制表符、回车、功能:检查参数字符是否为下列之一:空格、制表符、回车、换行、垂直制表符和送纸,换行、垂直制表符和送纸,如果是则返回如果是则返回1,否则返回,否则返回0。11.函数原型:函数原型:bit isxdigit(ch
46、ar c);再入属性:再入属性:reentrant功能:检查参数字符是否十六进制数字字符,如果是则返回功能:检查参数字符是否十六进制数字字符,如果是则返回1,否则返回,否则返回0。12.函数原型:函数原型:char toint(char c);再入属性:再入属性:reentrant功能:将功能:将ASCII字符的字符的09、af转换为十六进制数,返回值为转换为十六进制数,返回值为0f。13.函数原型:函数原型:char tolower(char c);再入属性:再入属性:reentrant功能:将大写字母转换成小写字母,如果不是大功能:将大写字母转换成小写字母,如果不是大写字母,则不作转换直接
47、返回相应的内容。写字母,则不作转换直接返回相应的内容。14.函数原型:函数原型:char toupper(char c);再入属性:再入属性:reentrant功能:将小写字母转换成大写字母,如果不是小功能:将小写字母转换成大写字母,如果不是小写字母,则不作转换直接返回相应内容。写字母,则不作转换直接返回相应内容。1.5.3 一般输入一般输入/输出函数输出函数stdio.hc51库中包含的输入库中包含的输入/输出函数都在输出函数都在stdio.h中,中,stdio.h库中的所有的函数都依赖库中的所有的函数都依赖MCS-51的串行口,的串行口,使用使用stdio.h库中的所有的函数串口必须进行初
48、始化。库中的所有的函数串口必须进行初始化。例如以例如以2400波特率(时钟频率为波特率(时钟频率为12mhz),初始化),初始化程序为:程序为:SCON=0 x52;TMOD=0 x20;TH1=0 xf3;TR1=1;当然也可以用其他波特率。关于串口驱动程序后面当然也可以用其他波特率。关于串口驱动程序后面介绍。在输入介绍。在输入/输出函数输出函数stdio.h中,所有其他的函数中,所有其他的函数都依赖都依赖getkey()和和putchar()函数,如果希望支持其他函数,如果希望支持其他I/O接口,只须修改这两个函数。接口,只须修改这两个函数。1.函数原型:函数原型:char _getkey
49、(void)再入属性:再入属性:reentrant功能:从串口读入一个字符,不显示。功能:从串口读入一个字符,不显示。2.函数原型:函数原型:char getkey(void)再入属性:再入属性:reentrant功能:从串口读入一个字符,并通过串口输出对应的字符。功能:从串口读入一个字符,并通过串口输出对应的字符。3.函数原型:函数原型:char putchar(char c)再入属性:再入属性:reentrant功能:从串口输出一个字符。功能:从串口输出一个字符。4.函数原型:函数原型:char *gets(char*string,int len)再入属性:再入属性:reentrant功能
50、:从串口读入一个长度为功能:从串口读入一个长度为len的字符串存入的字符串存入string指定的指定的位置。输入以换行符结束。输入成功则返回位置。输入以换行符结束。输入成功则返回string参数指针,参数指针,失败则返回失败则返回null。5.函数原型:函数原型:char ungetchar(char c)再入属性:再入属性:reentrant功能:将输入的字符送到输入缓冲区并将其值返回给调用者,功能:将输入的字符送到输入缓冲区并将其值返回给调用者,下次使用下次使用gets 或或getchar时可得到该字符,但不能返回多个字时可得到该字符,但不能返回多个字符。符。6.函数原型:函数原型:int
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。