|
金水32051编译器是为8位8051系列单片机开发的C语言编译器。金水32051编译器采用C351作为C语言规范,采用A351作为汇编语言规范。以下将金水32051编译器使用的C语言简称为C351,将金水32051编译器使用的汇编语言简称为A351。 一、金水32051编译器基础从C语言编译器的角度,STC单片机目前分为8位的STC89系列、STC15系列和STC8系列,以及双核的AI8051U位单片机系列。为了保护用户现有的C语言程序甚至汇编语言程序资源,能够顺利地应用到STC各个系列的单片机,金水32051编译器采用虚拟的“金石32051单片机”模型和“金水明32051指令集”作为编译器模型,以此为基础向用户提供A351汇编语言和C351单片机控制语言。 金水明32051指令集是8051指令集的一个超集。金水明32051指令集包含了完整的“8051指令集”以及8051没有的16位/32位整数加减乘除等指令和32位浮点数的加减乘除指令。金水明32051指令集采用共享寄存器的技术,支持32位寄存器与数据处理。 金水32051编译器在8位8051单片机上模拟实现了金水明32051指令集,用户可以使用A351汇编语言的8位、16位和32位指令来编写在8051单片机上运行的程序。用A351和C351编写的程序可以继续在STC未来的8位和32位的单片机上继续使用,为用户从8位单片机向32位单片机过渡提供了方便。
二、金水32051编译器软件包这次推出的金水32051编译器软件放在“00000_金水32051编译器目录下: (1)其中子目录”0000_金水32051_EXE”包含了执行文件和库: 该目录下除了执行程序“金水32051.exe”外,还有一个子目录“LIBSTC”,下面存放金水32051编译器的函数库。子目录“Data”是空的临时文件存放目录。 (2)金水32051编译器是一个Windows环境下的命令行EXE程序,使用前请将整个“0000_金水32051编译器”子目录完整地复制到C盘根目录下:“C:\ 0000_金水32051编译器”,因为每个范例中的批处理文件中的执行程序都被预写为这个目录。 如果用户放在其他目录下,请修改批处理文件的内容即可。 (3)打包文件“0000_金水32051编译器.rar”为子目录”0000_金水32051编译器”压缩包。 (4)“0001_C351_INC”子目录下存放了金水32051编译器库函数的头文件。
三、金水32051编译器软件开发环境金水32051编译器建议使用Keil评估版/学习版作为集成开发环境。 Keil的C51是8位8051单片机广泛使用的软件集成开发环境,C351继承了C51的大部分语法规范,可以看作是C51的一个子集,因此可以使用Keil的C51作为集成开发环境,并在编辑源程序的过程中初步检查C351语言语法错误。 C351源程序是文本程序,可以用各种文本编辑器编写和修改,也可以使用Keil集成环境来编辑,同时利用该集成环境来对程序进行C语言语法检查,检查比如括号不配对,函数调用格式不一致等常见的C语言程序错误。本指南的范例就是使用Keil评估版作为项目管理器,作为源程序编辑器和C语法初步检查器。 对于有多个源程序和OBJ模块的单片机项目,用户可以用Keil的项目管理器来管理这些模块。由于金水32051编译器编译时是读磁盘上的Keil的项目文件,因此,用户在项目中添加或者删除了模块文件后应该退出集成环境,确保让Keil把项目的变化保存到磁盘文件中。 金水32051编译器没有进行寄存器优化,它使用XRAM(xdata)作为变量空间,相当于Keil的大模式。对于许多简单的程序,Keil也可以编译出HEX文件,烧录后程序也可以运行,但是两者的运行效果未必相同。 由于金水32051编译器可以产生最终的HEX烧录文件,因此作为集成开发环境,只要使用Keil的免费的评估版软件就可以了,它产生不产生HEX结果无所谓。 金水32051编译器除了输出HEX文件,还输出编译信息文件(.MSG为后缀)和汇编列表文件(.LST为后缀),两者都是文本文件,用户可以用记事本或写字板打开查看。 金水32051编译器只对文本源程序进行编译,产生HEX烧录文件。在编译过程中碰到程序中的语法错误,出错信息输出到编译信息文件中。如果出现致命错误,则不生成HEX文件(但也不删除现有的)。
四、 8位8051单片机的架构8位8051单片机使用8051内核,具有以下的特点: (1)由于8051指令集的限制,通用寄存器和累加器都是8位的,因此不能直接在汇编指令中支持16位/32位基本运算指令。 (2)8051指令集有5个存储空间:64KB的CODE程序空间、64KB的XRAM(xdata)扩展RAM空间、256字节的DATA内部直接存取RAM空间、256字节的IDATA内部间接存取RAM空间和256位的BIT位存取空间。 其中DATA、IDTA和BIT存储空间在8位的存取地址上有重叠。 (3)除了DPTR外,没有其他的通用16位指针来存取CODE和XRAM(xdata)空间的数据,对于C语言指针数据和局部变量的存取不方便。 (4)没有间接+偏移这样的寻址方式,对C语言结构类型数据的存取不方便。 (5)8051指令集的SP寄存器是8位的,系统堆栈最多为256字节,不能采用通常C语言的BP+SP组合来实现标准C语言局部变量存储模型。
五、金水32051编译器满足了8位8051单片机对C语言的需求金水32051编译器采用金水明32051指令集实现的C351语言满足了8位8051单片机对C语言的需求。 (1)金水明32051指令集支持8位整型数据变量和操作。作为8位单片机,支持8位操作指令是必须的。A351和C351支持8位的有符号和无符号的变量以及运算,支持8位的端口定义和操作。 (2)金水明32051指令集支持16位整型数据变量和运算。STC15和STC8等高性能的8位8051单片机片上已经有了10位和12位的高速ADC,因此需要处理16位数据。A351和C351支持16位的有符号和无符号的变量以及运算。 C351虽然支持16位的端口定义和操作,但是STC的8位单片机是8位内部数据总线,16位端口操作必须分高低8位两次进行。由于有些片上设备16位的端口,存取高低8位必须按指定的次序进行,因此建议用户分别使用高低8位端口进行操作。 (3)金水明32051指令集支持32位整型数据变量和运算。ADC是单片机应用的一个重要领域,将16位的探测量转换为物理量就需要32位运算。比如将12位的AD变换值V归一化到0到500(5.00伏),按照变换公式:V*500/4095,要想得到正确的结果,必须将这个表达式中的三个运算量转换为32位整型后再进行运算才行。 A351和C351支持32位的有符号和无符号的变量以及运算。 (4)金水明32051指令集支持32位浮点数变量和操作。8位单片机的一个重要应用领域是作为物理量探测器的数据处理核心,因此必须要有浮点数变量来支持取值范围很大的物理量处理。A351和C351支持32位的浮点数变量以及运算。 (5)金水明32051指令集支持Bit位数据变量和操作。8位单片机的很多应用涉及单端口控制,比如控制一个电源开关。另外还有专门的单总线等数据通讯协议只用少数几根线。因此单片机必须要有Bit变量来处理这些单个逻辑值的状态。A351和C351支持单独的Bit位变量以及运算。
|