Keil C51单片机开发环境
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用户编写的源程序只能控制程序执行的流程。但有些时 候,需要对编译程序的工作进行一些干预,这时就要用 到编译预处理命令。
技术凝聚实力 专业创新出版
4.2 Keil C51开发工具
MCS-51内核系列单片机作为工业使用的微处理器,从1985年开始,就有对 应的C语言编译器,简称C51。并非所有的C51编译器都产生和发挥MCS-51 单片机特点的有效代码,下面就各公司的编译器做简要介绍。
通常情况下,程序从EXTERN、PUBLIC和SEGMENT指示器 开始。列表文件包含了每个源代码的行号及每行产生的 代码。
列表文件包含了错误和告警信息,错误和告警的位置被 明显地标识出来。
存储器组的占用信息和程序中的错误和告警总数包括在 文件的结尾处。
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
(2)代码段 BL51连接器支持创建程序空间大于64KB的应用。8051不能直接操作
大于64KB的代码地址空间,必须由外部硬件来交换代码段。完成此 功能的硬件必须要8051中运行的程序的控制中,这就是段(块)切换。 BL51连接器管理一个公共的区域和32个最大64KB空间的块,从而达 到总共2MB的分段程序空间。支持外部硬件块切换的软件包括的一 个可编辑的汇编程序,以适应应用中的特定硬件平台。 BL51连接器可以定义哪个段装载哪个特定的程序模块。通过仔细考 虑,把各个函数分配到不同的段中来创建一个非常大而有效的应用。
类似Borland C和Turbo CO C编译器产生一个汇编语言文件,然后再用汇 编器,其编译速度较快。
技术凝聚实力 专业创新出版
4.2 Keil C51开发工具
(4)DUNFIELD SHAREWARE
它是非专业的软件包,不支持float、long或结构等数据结构。它不生成 重定位代码。
(5)FRANKLIN 它的鼻祖是Keil,在代码生成方面领先,可产生最少的代码。它支持浮点
数组是指具有相同数据类型的变量集合,拥有共同的名 字。数组中的每个特定元素都使用下标来访问。数组存 放在一段连续的存储地址中,第一个数组元素存放于最 低的地址,最高的地址对应最后一个数组元素。数组有 一维的和多维的,下面分别介绍。
(1)一维数组
一维数组的声明格式是:
类型ቤተ መጻሕፍቲ ባይዱ变量名[长度]
类型是指数据类型,即每一个数组元素的数据类型,包 括整数型、浮点型、字符型、指针型以及结构和联合。
技术凝聚实力 专业创新出版
4.1.1 C51程序的基本结构
C51 源程序结构与一般C 语言基本一致,C51 源程序文 件的扩展名为".c" ,如Add. c 、Max. c 等。一个C51 源程序大体上是一个函数定义的集合,在这个集合中有 且仅有一个名为main( )的函数,也称为该程序的主函 数。
技术凝聚实力 专业创新出版
4.1.6 结构体与联合体
结构体是一种由基本数据类型构成、并用一个标识符来命名的各种 变量的组合。结构体中可以使用不同的数据类型。
在Keil C51中,结构体也是一种数据类型,可以使用结构体变量, 因此,与其他类型的变量一样,在使用结构体变量时要先对其定义。
定义结构体变量的一般格式如下: struct 结构体名 { 类型 变量名; 类型 变量名; …… } 结构体变量;
Keil C51是一款十分流行的MCS-51内核单片机C语言开 发环境,在本章中详细向读者介绍Keil C51的开发方法, 使读者能够具备利用C语言开发AT89S51单片机程序的能 力。
技术凝聚实力 专业创新出版
4.1 C语言编程基础
Keil C51的开发方法其实和大家学习的C语言基本相同, 本节介绍C51的开发,内容和C语言的基础知识差不多, 由于篇幅有限,如需要深入了解的读者可以参考一些C 语言的教程。
技术凝聚实力 专业创新出版
第4章 Keil C51单片机开发环境
通过前面章节的讲解,读者对于AT89S51单片机的硬件 结构和汇编语言编程都有了一个详细的了解。随着单片 机开发工具的不断发展,目前,利用C语言开发单片机 程序,具有效率高、可读性强、可移植性强等特点,已 经成为单片机程序开发中的主要方式。
和长整数、重入和递归,不提供库源代码,不能生成能汇编的汇编代码, 仅产生混合代码,只能修改后汇编。若使用汇编语言,必须分开汇编程序, 然后手工连接。 若使用单片模式,它是最好的选择。 (6)Keil C51 Keil C51的V8. xx是目前世界上最好的51单片机的汇编和C语言的开发工 具。它支持汇编、C语言以及混合编程,同时具备强大的软件仿真和硬件 仿真功能。 在本节中主要介绍采用Keil C51的开发方法。
(1)数据地址管理 BL51连接器通过覆盖那些不会同时使用的函数变量的技术来管理8051有限
的内部存储器资源,这极大地降低了大多数应用对存储器的需求。BL51连 接器分析函数间的引用以决定存储的覆盖策略。可以用OVERLAY指示器来 人为控制函数间的引用,这些引用被连接器用来确定哪些存储器单元是独 占的。NOOVERLAY指示器让BL51不进行覆盖连接,这在使用间接调用的函 数或为了调试而禁止覆盖时比较有用。
主函数是程序的入口,它是一个特殊的函数,程序的执 行都是从main( )函数开始的。主函数中的所有语句执 行完毕,则程序执行结束。
技术凝聚实力 专业创新出版
4.1.2 标识符与关键字
标识符是用来标识源程序中某个对象的名字的,这些对 象可以是语句、数据类型、函数、变量、数组等等。C 语言是区分大小写的一种高级语言,如果要定义一个定 时器1,可以写做“Timer1”,如果程序中有"TIMER1", 那么这两个是完全不同定义的标识符。
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
(3)公共段 段切换程序中的公共段是一块在任何时候、在所有的段
中都可以访问的存储器。此公共段在物理上就不能切换 出局或变换地址空间。 在公共段中的代码可以复制到每个段中(如果切换整个 程序空间)或驻留在一个独立的地址空间或器件中(公共 段不用切换)。
标识符由字符串、数字和下划线等组成,需要注意的是, 第一个字符必须是字母或下划线,类似“1Timer”的定 义是错误的,编译时便会有错误提示。有些编译系统专 用的标识符以下划线开头,所以除了在定义专业标识符 以外,一般不要以下划线开头命名标识符。
技术凝聚实力 专业创新出版
4.1.3 数据类型
数据在计算机内存中的存放情况由数据结构决定。C 语 言的数据结构是以数据类型决定的,数据类型可分为基 本数据类型和复杂数据类型,复杂数据类型是由基本数 据类型构造而成的。
A51汇编器宏处理的另一个有用的特性是根据命令行参 数或汇编符号进行条件汇编。代码段的条件汇编能帮助 用户实现最紧凑的代码,也可以从一个汇编源代码文件 产生不同的应用:
技术凝聚实力 专业创新出版
4.2.3 Keil C51的A51宏汇编器
A51汇编器产生一个列表文件,包括行号、汇编时的时 间和日期。关于汇编器运行和目标文件产生的信息被记 录下来。
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
技术凝聚实力 专业创新出版
4.2.1 μVision 3集成开发环境结构
当使用Keil C51的开发工具进行项目开发时,项目的开 发流程和其他软件开发项目的流程极其相似,一般遵循 下面几步:
创建一个项目,从器件库中选择目标器件,配置工具设 置;
用C语言或汇编语言创建源程序; 用项目管理器生成应用; 修改源程序中的错误; 测试、连接应用。
技术凝聚实力 专业创新出版
4.2.2 Keil C51的C编译器
C 语言是一种通用编程语言,它提供高效的代码、结构 化的编程元素及丰富的运算符。C语言不是一个大型的 语言,不是为特定领域内的应用而设计的。其普遍性使 其可以为各种不同的软件任务提供便利有效的编程方案。 许多应用设计使用C 语言比其他专门语言更有效。
技术凝聚实力 专业创新出版
4.1.7 类型定义
与C语言编程一样,Keil C51允许由用户自己定义类型 说明符,也就是说允许由用户为数据类型使用自定义的 名字,该功能可以使用类型定义符typedef完成。例如, 有整型量a、b,其说明如下:
int a ,b;
其中int是整型变量的类型说明符,int的长度为16位, 为了增加程序的可读性,可把整型说明符用typedef定 义为“typedef int INT16”,这以后就可用INT16来代 替int作整型变量的类型说明了,例如:
(1)AMERICAN AUTOMATION 该编译器通过#asm和endasm预处理选择支持汇编语言。此编译器编译速度
慢,要求汇编的中间环节支持。 (2)ARCHIMEDES 它的鼻祖是瑞典的JAR,是支持分组开关(Bank)的编译器。它和ANSI C兼
容,只是需要一个较复杂的连接程序控制文件支持,程序才能运行。 (3)AVOCET 该软件包包括编译器、汇编器、连接器、库MAKE工具和编辑器,集成环境
BL51是具有代码分段功能的连接器/重定位器,它组合一个或多个目标模 块成一个8051的执行程序。此连接器处理外部和全局数据,并将可重定位 的段分配到固定的地址上。BL51连接器处理由Keil C51编译器、A51汇编 器和Intel PL/M-51编译器、ASM-51汇编器产生的目标模块。连接器自动 选择适当的运行库并连接用到的模块。BL51主要有以下的功能:
这些独立的小模块也可以作为一种固定规格的程序,用来组成新的 大程序,使得程序的可移植性和可重用性能大大提高。
一些较常用的函数时,只要将其保存在函数库里,在以后的编程中 可被方便地调用而不需要再去编译它们,连接时将会自动从相应的 库中装配成所需程序。
技术凝聚实力 专业创新出版
4.1.6 数组与指针
技术凝聚实力 专业创新出版
4.1.5 函数
一个好的C语言程序应该把一个大问题划分成若干子问题,解决一 个子问题对应编制一个函数,C程序一般是由大量的小函数而不是 由少量大函数构成的。使用函数带来的好处是程序各部分相互充分 独立,任务单一。函数提供了编制程序的手段,使之容易读、写、 理解、排除错误、修改和维护。
Keil 的C51优化交叉编译器是完全符合ANSI美国国家标 准协会标准的针对8051系列MCU的C编译器,生成的可执 行代码快速、紧凑,在运行效率和速度上可以和汇编程 序得到的代码相媲美。
技术凝聚实力 专业创新出版
4.2.3 Keil C51的A51宏汇编器
A51是一个8051系列MCU的宏汇编器,它把汇编语言翻译 成机器代码。A51汇编器允许定义程序中的每一个指令, 在需要极快的运行速度、很小的代码空间和精确的硬件 控制时使用。其宏特性让公共代码只需要开发一次,从 而节约了开发和维护的时间。
在标准C语言中基本的数据类型为char、int、short、 long、float和double,而在C51编译器中int和short相 同,float和double相同。
技术凝聚实力 专业创新出版
4.1.4 常量与变量
在程序运行过程中不能改变值的量称为常量,在程序运 行过程中不断变化的量称为变量。可以使用所有C51编 译器支持的数据类型定义一个变量,而常量的数据类型 只限于整型、浮点型、字符型、字符串型和位标量。
INT16 a , b;
//等效于 int a ,b
技术凝聚实力 专业创新出版
4.1.8 宏定义与条件编译
在编写程序时,使用的是用户能够看懂的ASCII码。但 是计算机必须将这些ASCII码经过翻译后变成机器语言。 这个翻译过程分两步,叫做编译、链接过程。
第一步的编译过程是将源程序中除了函数调用以外的语 句翻译成机器语言,此时要生成一个中间目标文件,后 缀名为obj。链接过程是将库函数的执行代码加入到刚 才生成的obj文件中,生成可执行文件。
技术凝聚实力 专业创新出版
4.2 Keil C51开发工具
MCS-51内核系列单片机作为工业使用的微处理器,从1985年开始,就有对 应的C语言编译器,简称C51。并非所有的C51编译器都产生和发挥MCS-51 单片机特点的有效代码,下面就各公司的编译器做简要介绍。
通常情况下,程序从EXTERN、PUBLIC和SEGMENT指示器 开始。列表文件包含了每个源代码的行号及每行产生的 代码。
列表文件包含了错误和告警信息,错误和告警的位置被 明显地标识出来。
存储器组的占用信息和程序中的错误和告警总数包括在 文件的结尾处。
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
(2)代码段 BL51连接器支持创建程序空间大于64KB的应用。8051不能直接操作
大于64KB的代码地址空间,必须由外部硬件来交换代码段。完成此 功能的硬件必须要8051中运行的程序的控制中,这就是段(块)切换。 BL51连接器管理一个公共的区域和32个最大64KB空间的块,从而达 到总共2MB的分段程序空间。支持外部硬件块切换的软件包括的一 个可编辑的汇编程序,以适应应用中的特定硬件平台。 BL51连接器可以定义哪个段装载哪个特定的程序模块。通过仔细考 虑,把各个函数分配到不同的段中来创建一个非常大而有效的应用。
类似Borland C和Turbo CO C编译器产生一个汇编语言文件,然后再用汇 编器,其编译速度较快。
技术凝聚实力 专业创新出版
4.2 Keil C51开发工具
(4)DUNFIELD SHAREWARE
它是非专业的软件包,不支持float、long或结构等数据结构。它不生成 重定位代码。
(5)FRANKLIN 它的鼻祖是Keil,在代码生成方面领先,可产生最少的代码。它支持浮点
数组是指具有相同数据类型的变量集合,拥有共同的名 字。数组中的每个特定元素都使用下标来访问。数组存 放在一段连续的存储地址中,第一个数组元素存放于最 低的地址,最高的地址对应最后一个数组元素。数组有 一维的和多维的,下面分别介绍。
(1)一维数组
一维数组的声明格式是:
类型ቤተ መጻሕፍቲ ባይዱ变量名[长度]
类型是指数据类型,即每一个数组元素的数据类型,包 括整数型、浮点型、字符型、指针型以及结构和联合。
技术凝聚实力 专业创新出版
4.1.1 C51程序的基本结构
C51 源程序结构与一般C 语言基本一致,C51 源程序文 件的扩展名为".c" ,如Add. c 、Max. c 等。一个C51 源程序大体上是一个函数定义的集合,在这个集合中有 且仅有一个名为main( )的函数,也称为该程序的主函 数。
技术凝聚实力 专业创新出版
4.1.6 结构体与联合体
结构体是一种由基本数据类型构成、并用一个标识符来命名的各种 变量的组合。结构体中可以使用不同的数据类型。
在Keil C51中,结构体也是一种数据类型,可以使用结构体变量, 因此,与其他类型的变量一样,在使用结构体变量时要先对其定义。
定义结构体变量的一般格式如下: struct 结构体名 { 类型 变量名; 类型 变量名; …… } 结构体变量;
Keil C51是一款十分流行的MCS-51内核单片机C语言开 发环境,在本章中详细向读者介绍Keil C51的开发方法, 使读者能够具备利用C语言开发AT89S51单片机程序的能 力。
技术凝聚实力 专业创新出版
4.1 C语言编程基础
Keil C51的开发方法其实和大家学习的C语言基本相同, 本节介绍C51的开发,内容和C语言的基础知识差不多, 由于篇幅有限,如需要深入了解的读者可以参考一些C 语言的教程。
技术凝聚实力 专业创新出版
第4章 Keil C51单片机开发环境
通过前面章节的讲解,读者对于AT89S51单片机的硬件 结构和汇编语言编程都有了一个详细的了解。随着单片 机开发工具的不断发展,目前,利用C语言开发单片机 程序,具有效率高、可读性强、可移植性强等特点,已 经成为单片机程序开发中的主要方式。
和长整数、重入和递归,不提供库源代码,不能生成能汇编的汇编代码, 仅产生混合代码,只能修改后汇编。若使用汇编语言,必须分开汇编程序, 然后手工连接。 若使用单片模式,它是最好的选择。 (6)Keil C51 Keil C51的V8. xx是目前世界上最好的51单片机的汇编和C语言的开发工 具。它支持汇编、C语言以及混合编程,同时具备强大的软件仿真和硬件 仿真功能。 在本节中主要介绍采用Keil C51的开发方法。
(1)数据地址管理 BL51连接器通过覆盖那些不会同时使用的函数变量的技术来管理8051有限
的内部存储器资源,这极大地降低了大多数应用对存储器的需求。BL51连 接器分析函数间的引用以决定存储的覆盖策略。可以用OVERLAY指示器来 人为控制函数间的引用,这些引用被连接器用来确定哪些存储器单元是独 占的。NOOVERLAY指示器让BL51不进行覆盖连接,这在使用间接调用的函 数或为了调试而禁止覆盖时比较有用。
主函数是程序的入口,它是一个特殊的函数,程序的执 行都是从main( )函数开始的。主函数中的所有语句执 行完毕,则程序执行结束。
技术凝聚实力 专业创新出版
4.1.2 标识符与关键字
标识符是用来标识源程序中某个对象的名字的,这些对 象可以是语句、数据类型、函数、变量、数组等等。C 语言是区分大小写的一种高级语言,如果要定义一个定 时器1,可以写做“Timer1”,如果程序中有"TIMER1", 那么这两个是完全不同定义的标识符。
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
(3)公共段 段切换程序中的公共段是一块在任何时候、在所有的段
中都可以访问的存储器。此公共段在物理上就不能切换 出局或变换地址空间。 在公共段中的代码可以复制到每个段中(如果切换整个 程序空间)或驻留在一个独立的地址空间或器件中(公共 段不用切换)。
标识符由字符串、数字和下划线等组成,需要注意的是, 第一个字符必须是字母或下划线,类似“1Timer”的定 义是错误的,编译时便会有错误提示。有些编译系统专 用的标识符以下划线开头,所以除了在定义专业标识符 以外,一般不要以下划线开头命名标识符。
技术凝聚实力 专业创新出版
4.1.3 数据类型
数据在计算机内存中的存放情况由数据结构决定。C 语 言的数据结构是以数据类型决定的,数据类型可分为基 本数据类型和复杂数据类型,复杂数据类型是由基本数 据类型构造而成的。
A51汇编器宏处理的另一个有用的特性是根据命令行参 数或汇编符号进行条件汇编。代码段的条件汇编能帮助 用户实现最紧凑的代码,也可以从一个汇编源代码文件 产生不同的应用:
技术凝聚实力 专业创新出版
4.2.3 Keil C51的A51宏汇编器
A51汇编器产生一个列表文件,包括行号、汇编时的时 间和日期。关于汇编器运行和目标文件产生的信息被记 录下来。
技术凝聚实力 专业创新出版
4.2.4 Keil C51的BL51代码链接器/定位器
技术凝聚实力 专业创新出版
4.2.1 μVision 3集成开发环境结构
当使用Keil C51的开发工具进行项目开发时,项目的开 发流程和其他软件开发项目的流程极其相似,一般遵循 下面几步:
创建一个项目,从器件库中选择目标器件,配置工具设 置;
用C语言或汇编语言创建源程序; 用项目管理器生成应用; 修改源程序中的错误; 测试、连接应用。
技术凝聚实力 专业创新出版
4.2.2 Keil C51的C编译器
C 语言是一种通用编程语言,它提供高效的代码、结构 化的编程元素及丰富的运算符。C语言不是一个大型的 语言,不是为特定领域内的应用而设计的。其普遍性使 其可以为各种不同的软件任务提供便利有效的编程方案。 许多应用设计使用C 语言比其他专门语言更有效。
技术凝聚实力 专业创新出版
4.1.7 类型定义
与C语言编程一样,Keil C51允许由用户自己定义类型 说明符,也就是说允许由用户为数据类型使用自定义的 名字,该功能可以使用类型定义符typedef完成。例如, 有整型量a、b,其说明如下:
int a ,b;
其中int是整型变量的类型说明符,int的长度为16位, 为了增加程序的可读性,可把整型说明符用typedef定 义为“typedef int INT16”,这以后就可用INT16来代 替int作整型变量的类型说明了,例如:
(1)AMERICAN AUTOMATION 该编译器通过#asm和endasm预处理选择支持汇编语言。此编译器编译速度
慢,要求汇编的中间环节支持。 (2)ARCHIMEDES 它的鼻祖是瑞典的JAR,是支持分组开关(Bank)的编译器。它和ANSI C兼
容,只是需要一个较复杂的连接程序控制文件支持,程序才能运行。 (3)AVOCET 该软件包包括编译器、汇编器、连接器、库MAKE工具和编辑器,集成环境
BL51是具有代码分段功能的连接器/重定位器,它组合一个或多个目标模 块成一个8051的执行程序。此连接器处理外部和全局数据,并将可重定位 的段分配到固定的地址上。BL51连接器处理由Keil C51编译器、A51汇编 器和Intel PL/M-51编译器、ASM-51汇编器产生的目标模块。连接器自动 选择适当的运行库并连接用到的模块。BL51主要有以下的功能:
这些独立的小模块也可以作为一种固定规格的程序,用来组成新的 大程序,使得程序的可移植性和可重用性能大大提高。
一些较常用的函数时,只要将其保存在函数库里,在以后的编程中 可被方便地调用而不需要再去编译它们,连接时将会自动从相应的 库中装配成所需程序。
技术凝聚实力 专业创新出版
4.1.6 数组与指针
技术凝聚实力 专业创新出版
4.1.5 函数
一个好的C语言程序应该把一个大问题划分成若干子问题,解决一 个子问题对应编制一个函数,C程序一般是由大量的小函数而不是 由少量大函数构成的。使用函数带来的好处是程序各部分相互充分 独立,任务单一。函数提供了编制程序的手段,使之容易读、写、 理解、排除错误、修改和维护。
Keil 的C51优化交叉编译器是完全符合ANSI美国国家标 准协会标准的针对8051系列MCU的C编译器,生成的可执 行代码快速、紧凑,在运行效率和速度上可以和汇编程 序得到的代码相媲美。
技术凝聚实力 专业创新出版
4.2.3 Keil C51的A51宏汇编器
A51是一个8051系列MCU的宏汇编器,它把汇编语言翻译 成机器代码。A51汇编器允许定义程序中的每一个指令, 在需要极快的运行速度、很小的代码空间和精确的硬件 控制时使用。其宏特性让公共代码只需要开发一次,从 而节约了开发和维护的时间。
在标准C语言中基本的数据类型为char、int、short、 long、float和double,而在C51编译器中int和short相 同,float和double相同。
技术凝聚实力 专业创新出版
4.1.4 常量与变量
在程序运行过程中不能改变值的量称为常量,在程序运 行过程中不断变化的量称为变量。可以使用所有C51编 译器支持的数据类型定义一个变量,而常量的数据类型 只限于整型、浮点型、字符型、字符串型和位标量。
INT16 a , b;
//等效于 int a ,b
技术凝聚实力 专业创新出版
4.1.8 宏定义与条件编译
在编写程序时,使用的是用户能够看懂的ASCII码。但 是计算机必须将这些ASCII码经过翻译后变成机器语言。 这个翻译过程分两步,叫做编译、链接过程。
第一步的编译过程是将源程序中除了函数调用以外的语 句翻译成机器语言,此时要生成一个中间目标文件,后 缀名为obj。链接过程是将库函数的执行代码加入到刚 才生成的obj文件中,生成可执行文件。