一、启动编译器 (1)倚天剑 Forth 8051单片机 交叉编译器软件(YTJ-XCC51 V2.1)是由“我的Forth(以下简称WDForth)”、“交叉编译器”和“8051汇编语言编译器”三个部分组成,这三个部分已经集成在名为“YTJ_F051.COM”的DOS可执行程序中了。 (2)倚天剑XCC51编译器的设计目标是对PC机上的STC单片机的Forth 8051程序进行编译,形成二进制的内存机器码映像,然后再生成HEX格式文件供STC-ISP软件烧录到目标单片机中运行,控制单片机实现各种功能。 (3)由于“YTJ_F051.COM”的文件尺寸大于64KB,因此需要用MS-DOS 2.0版的多段加载程序“LOAD.COM”来加载执行。 (4)用户只要双击批处理文件“YTJ_XCC51_V21.BAT”就可以启动倚天剑 Forth 8051单片机 交叉编译器软件(以下简称“倚天剑XCC51”),进入Forth8051交叉编译的DOS界面环境了。 该批处理文件的内容为“LOAD.COM YTJ_F051.COM”。 (5)如果用户有兴趣查看“YTJ_F051.COM”的代码,可以启动DOS环境的DEBUG程序。用户只要双击批处理文件“DEBUG_YTJ_XCC51_V21.BAT”即可。该文件的内容为“DEBUG LOAD.COMYTJ_F051.COM” (6)倚天剑XCC51启动后的界面如下图: (7)在倚天剑XCC51环境中手工输入Forth命令。 DOS窗口出现“JL>”的命令行提示符后,用户就可以手动输入Forth命令或者程序,输入以回车键为结束符,Forth系统就开始解释执行命令或者程序。 比如在Forth中计算表达式“1+2*3”并显示结果的Forth程序为“1 2 3 * + .<回车>”,在DOS命令窗口键入并执行这段的程序的结果为: (8)一般的数学公式和计算高级语言采用中间波兰表达形式:操作符在操作室中间(1+2),而Forth语言采用逆波兰的表达形式:操作符在操作数后面( 1 2 + ),并且采用空格作为Forth字之间的分隔符,LISP语言采用前缀波兰表达形式( (+ 1 2) )。
二、加载与编译Forth程序 (9)Forth程序行像英文句子一样,由一个个“Forth字”组成,字与字之间由空格分隔,以回车作为结束。Forth字也称“Forth命令”,可以从键盘上输入,也可以写在程序文件中作为程序输入。 WDForth程序文件是纯文本文件,一般用“.J”为后缀来区分,可以用任何文本编辑器编辑。 WDForth程序文件用“TF_LOAD”命令来加载,命令的格式为“TF_LOAD 文件名”。
(10)倚天剑XCC51随编译器提供了一个求平均值得Forth程序“YTJ_DEMO.J”,进入Forth环境后,使用命令“TF-LOAD YTJ_DEMO.J<回车>”就可以编译执行改范例程序了,像下图那样: 程序“YTJ_DEMO.J”定义了一个求平均值的Forth字“AV”,以后只要按照要求的格式输入N个数,就可以求出这N个数的平均值并显示出来了。 如上图输入“11 22 33-44 4 AV<回车>”之后,就显示出“11,22,33, -44 ”这4个数的平均值为“5”来了。 (11)Forth程序以精确无歧义和精简著称,“YTJ_DEMO.J”程序中求平均值的Forth字的定义只有一行: : AV DUP >S 0 SWAP 1 1 for + endfor S> / . ; 总共15个单词,是世界上最短的求平均值计算机程序,没有之一。 (12)倚天剑XCC51的设计目的是对PC机上的STC单片机的Forth 8051程序进行编译,然后生成HEX格式文件供STC-ISP软件烧录到目标单片机上,控制单片机实现各种功能。 (13)倚天剑XCC51随编译器提供了一个最简单的STC打狗棒开发板上运行的“点亮LED灯” 程序,范例程序的文件名为“X51_DEMO.J”。手动输入“TF_LOAD X51_DEMO.J<回车>”命令后,系统显示OK或者退出,就表明编译成功了,如下图所示。 这时就可以看到倚天剑XCC51根据范例程序生成的“X51_DEMO.HEX”烧录文件了。烧录到STC打狗棒开发板后就可以看到连接到P2端口的LED灯隔一个亮一个了。 (14)下图是范例程序“X51_DEMO.J”的内容: 使用倚天剑的8051程序一般分为5个部分: 第1行到第5行的初始化部分设置倚天剑XCC51编译器。 第7行到第9行定义P2端口的模式寄存器。逗号不是Forth语言里的分词符,所以可以作为Forth词名字的一部分。本程序加上逗号,使其在程序里看起来像8051汇编语言的左操作数。 另外像P2这些最老的8051单片机的SFR寄存器,已经在Forth 8051 汇编语言中定义过了,用户就不用自己再定义了。 第11行到第22行是对STC单片机的设置,为控制程序的运行建立起运行的环境。 第25行到第31行是单片机控制程序的主循环部分,其中第28行将连接在P2端口上的LED灯隔一个亮一个。 用户可以修改这行程序中的055数字,实现自己的灯亮花样。 最后一部分第34行程序是将已经生成的机器码输出为HEX格式的烧录文件。其中Forth字“YTJ_HexOut”是烧录命令,其前面的数字是从地址0000开始输出的字节数,其后面的HEX文件的文件名。
三、结束语 (15)倚天剑XCC51编译器有许多新颖的特点,但与常规编译器最大的不同点是厂商可以自己为某款8051单片机或者开发板定制专用的编译器,将该款单片机和开发板上的许多设备的驱动程序都内含在编译器里,成为某个或某类产品的“专属编译器”,大大方便终端用户的程序开发。本系列文章将以此介绍如何DIY自己的编译器。 (16)虽然本文只有最简单的两个范例程序“YTJ_DEMO.J”和“X51_DEMO.”,但如果你实验成功了,就表示你已经有了新的一款开发STC8051单片机软件工具了,你就可以开始使用C语言和汇编语言外的第三种计算机语言来编写STC单片机程序了,你就可以开始探索你的“DIY自己的编译器”的路了。
|