KEIL C5l是目前最流行的51系列MCU编译器。
如果程序代码与字库常量代码总和不超过64 KB,则可在KEIL UV2的集成开发环境下,通过安装Silicon Laboratories公司的驱动程序直接对C805lFl2X进行编译,并通过JTAG调试仿真器实现不占用户资源的实时/断点调试。但当程序代码与字库常量代码总和超过64 KB时,在KEIL UV2下,只能采用BANK编译技术。常量默认设置是分配到低32 KB的COMMON区,而COMMON区还要存放中断处理等代码,因此如果想将点阵字库常量分配到指定的BANK,还需要采取其他方法。 2 处理大量常量代码的思路与实现
如果C8051F12X需要下载的程序代码与字库常量代码总和超过64 KB,则可使用Silicon Laboratories公司的集成开发环境。在此IDE中,C805lFl2X的Flash编程是分4个BANK进行的,每个BANK对应一个HEX格式的代码文件。根据这样的特点,可以绕开KEIL C5l编译器,直接把点阵字库或其他常量表格处理为标准HEX格式文件,从而实现常量代码在任意BANK的存放。
假设一个点阵字库含3200个常用汉字,需要分配32×3200=102 400字节空间。设计上可以这样分配空间:BANKl及BANK2全部使用,各32 768字节,共可以存放2048个汉字的点阵。由于C805lFl2X最后1026字节为系统保留空间,所以BANK3分配990个汉字的点阵,占990×32=3l680字节,还剩162个汉字的点阵,需5184字节,分配到COMMON(BANKO)的最高端。BANKl~BANK3的起始地址都是由8000H开始的。对BANKO来说,162个汉字的点阵字库从613COH开始存放,这也意味着留给程序的空间不能超过27584字节。如果程序较大,但不超过64KB,同时字库不需要很大,则可分配63KB为字库,64 KB为程序(若程序用不完64 KB,则多余空间也可分配给字库,以扩大字库容量)。生成点阵字库的HEX文件,可采用ASM的DB定义方法、C51的数组定义方法或者自己编写运行于PC的程序的方法。前两种方式还需要经KEIL编译,但可灵活选择所需的汉字。从编译方面看,ASM的DB定义方式不需要额外设置编译参数,比C51的数组定义方法要好。通常字模软件都有ASM格式和C51格式的选择,可以利用其ASM格式输出,按上述空间分配原则,分别对每个BANK做对应的HEX文件。下面举例说明。假设使用4个ASM文件,每个都是64字节。B0.ASM内容是00H~3FH,存放于BANK0从7FC0H开始的空间;B1.ASM内容是40H~7FH,B2.ASM内容是80H~CFH,B3.ASM内容是DOH~FFH,BANKl~BANK3均存放于各自BANK从8000H开始的空间,物理上分别位于C8051F12X的8000H、10000H、18000H开始的区域。B0.ASM中的内容为:
ORG 7FCOH
DB 000H.001H,002H,003H+004H,005H,006H,007H
DB 008H,009H,OOAH,00BH,OOCH,OODH,00EH,00FH
DB 010H,011H,012H,013H,014H,015H,016H,017H
DB 018H,019H,01AH,0lBH,01CH,01DH,01EH,0lFH
DB 020H,021H,022H,023H,024H,025H,026H,027H
DB 028H,029H,02AH,02BH,02CH,02DH,02EH,02FH
DB 030H,03lH,032H,033H,034H,035H,036H,037H
DB 038H,039H,03AH,03BH,03CH,03DH,03EH,03FH
END;
其他3个ASM文件格式一样,但ORG全部改为8000H,内容也相应替换。 3 生成HEX文件方法
启动UV2集成开发环境,新建一项目,由于现在仪为4个ASM的常量代码表编译H
EX文件,器件可选包含32 KB以上ROM的任意一型号的51MCU。考虑到以后实际使用C8051F12X,可以直接选择C8051F12X。不必配置Code Banking的选项,在Output选项卡的CreateHEX File选项上配置.以创建HEX文件;同时,注意每次修改ASM都修改Name of Executable右边的文件名,以免后续HEX文件覆盖前次结果,如图1所示。