欢迎来到天天文库
浏览记录
ID:59473392
大小:290.00 KB
页数:93页
时间:2020-09-14
《单片机C51程序设计(补充)ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、5.3.1KeilC语言1、概述KeilC语言的编译器及编译过程如图5-10所示。单片机C语言程序设计图5-10KeilC语言的编译器及编译过程在KeilC语言的软件包中,包含下列文件:①C51编译器KeilC51编译器是一个基于ANSIC标准的、针对80C51系列MCU的C编译器,生成的可执行代码快速、紧凑,在运行效率和速度上可以和汇编程序得到的代码相媲美。②A51宏汇编器A51宏汇编器是一个8051系列MCU的宏汇编器,支持8051及其派生系列的全部指令集。它把汇编语言汇编成机器代码。本汇编器允许定义程序中的每一个指令,在需要极快的运行速度,很
2、小的代码空间,精确的硬件控制时使用。本汇编器的宏特性让公共代码只需要开发一次,从而节约了开发和维护的时间。A51汇编器将源程序汇编成可重定位的目标代码,并产生一个列表文件。其中可以包含也可不包含字符表及交叉参考信息。③BL51连接/定位器BL51连接/定位器是具有代码分段功能的连接/定位器,利用从库中提取的目标模块和由编译器或汇编器生成的一个或多个目标模块,处理外部和全局数据,并将可重定位的段分配到固定的地址上。所产生的一个绝对地址目标模块或文件包含不可重定位的代码和数据。所有的代码和数据被安置在固定的存储器单元中。此绝对地址目标文件可以用来:。写
3、入EPROM或其它存储器件。。由uVision2调试器使用来模拟和调试。。由仿真器用来测试程序。④LIB51库管理器LIB51库管理器让你建立和维护库文件。库文件是格式化的目标模块(由编译器或汇编器产生)的集合。库文件提供了一个方便的方法来组合和使用大量的连接程序可能用到的目标模块。虽然KeilC51是一个兼容ANSIC的编译器,但为了支持80C51系列MCU还是加入了一些扩展的内容。C51编译器与ANSIC相比,扩展的内容包括:数据类型、存储器类型、存储模式、指针及函数(包括:定义函数的重入性、指定函数的寄存器组、指定函数的存储模式及定义中断服务
4、程序)。2、KeilC对ANSIC的扩展前已述及,本书的读者在前修课程中已经学过了通用的C语言课程,因此在这里将不再叙述有关C语言的一般内容,仅简要地描述KeilC51对ANSIC的扩展。(1)数据类型KeilC51编译器支持的各种规格的数据类型列于表5-1。除了这些数据类型以外,变量可以组合成结构、联合及数组。表5-1KeilC51支持的数据类型数据表5-1所列的数据类型中,bit、sbit、sfr和sfr16等四种类型在ANSIC中没有,是C51编译器中新增的。sbit、sfr和sfr16类型的数据是用于操作80C51的特殊功能寄存器的。例如,
5、下面的表达式:sfrP0=0x80;/*定义80C51P0口的特殊功能寄存器*/声明了一个变量P0,并且把它和位于0x80(80C51的P0口)处的特殊功能寄存器联系在一起。1)bit类型bit数据类型可能在变量声明参数列表和函数返回值中有用。一个bit变量的声明与其它数据类型相似,例如:bitdone_flag=0;/*位变量*/bittestfunc(bitflag1,bitflag2);/*位函数*/所有的bit变量放在80C51内部存储区的位段。因为这个区域只有16字节长,所以在某个范围内最多只能声明128个位变量。bit变量的声明中,应包
6、含存储类型。但是因为bit变量存储在80C51的内部数据区,只能用data和idata存储类型,不能用别的存储类型。bit变量和bit声明有以下限制:一个位不能被声明为一个指针,例如:bit*ptr;/*非法*/不能用一个bit类型的数组,例如:bitware[5]/*非法*/·2)sbit、sfr和sfr16数据类型80C51系列MCU用特殊功能寄存器SFR来控制计时器、计数器、串口、并口和外围设备。它们的可以用位、字节和字访问。与此对应,编译器提供sbit、sfrs和fr16数据类型访问SFR。下面说明这些数据类型。ⅰ.sfr类型sfr和C的其
7、它变量一样声明。例如:sfrP0=0x80;/*P0口,地址为80h*/sfrP1=0x90;/*P1口,地址为90h*/sfrP2=0xA0;/*P2口,地址为0A0h*/sfrP3=0xB0;/*P3口,地址为0B0h*/P0、P1、P2和P3是声明的SFR名。在等号(=)后指定的地址必须是一个常数值不允许用带操作数的表达式。传统的80C51系列支持SFR地址从0x80到0xFF。ⅱ.sfr16类型编译器提供sfr16数据类型,将两个8位的SFR作为一个16位的SFR来访问。访问该16位的SFR只能是低字节跟着高字节,即将低字节的地址用作sfr
8、16声明的地址。例如:sfr16T2=0xCC;/*定时器2,T2L的地址为0CCh,T2H的地址为0CDh*/sfr16
此文档下载收益归作者所有