义隆单片机课堂
EM78P447S单片机入门与实作系列进座

🏠 首页 《无线电》杂志 2002年 🔗 第11期 🔗 第1065353216页 分类:电脑与单片机 🔗

三、初次体验程序的运行

在这里先用一个预先编写好的“范例程序”(程序文件名称为LXH-LED.ASM,程序清单列于下面,可以先不必花时间去推敲该程序),引导大家领略一下SIM447的风格和特点,同时也体验一下借助于SIM447调试程序的直观性和便捷性,以此让大家先睹为快。在这个范例中,将虚拟的8只LED接到PORT6端口上,程序中利用循环方式,控制LED作往复的闪烁移动,呈现出类似霹雳灯的效果。

这个范例程序实现的功能是:它可以控制8只红色LED灯,其中点亮7只、熄灭1只,并且被熄灭的LED灯的位置来回不停地移动,从而实现类似“霹雳灯”的视觉效果。

首先,利用操作系统DOS之下的编辑器EDIT.EXE或者Windows之下的“记事本NOTEPAD.EXE”等现成的纯文本文件(即ASCII码文件)编辑工具软件,把该范例程序录入,并且以一个字符数不超过8个的文件名,比如“LXH-LED.ASM”,保存到与SIM447相同的子目录下(笔者建议单独建立一个工作子目录专门用来储存用户自己创建的各种程序),从而建立起源程序文件。启动记事本的操作命令为:开始>程序>附件>记事本;启动EDIT的操作命令为:开始>运行…,在其后出现的对话框中键入EDIT即可(不过,倘若用户获得的软盘中,或者下载得到的压缩文件包中已经具备该源程序的拷贝,则可以免去读者自行录入的过程)。

之后,再利用汇编器MASM78对于“LXH-LED.ASM”进行汇编(如果用户源程序存放在了单独的子目录下,那么在进行汇编和装载模拟器而需要输入文件名时,都应该带上文件存放路径),可以得到8个(或9个)不同后缀的文件,这当中.ASM、.LST、.EER、.SYM、.ICE和.MDT文件均可以利用记事本等文本编辑器打开查看。其中列表文件.LST和符号文件.SYM的格式分别见下面。而只有其中的两个文件用于SIM447的运行和调试过程中,分别是目标文件LXH-LED.CDS和符号文件LXH-LED.SYM(不过,倘若用户获得的工具软件SIM447所在的目录中,已经具备目标程序LXH-LED.CDS的拷贝,则可以免去读者自行汇编的过程)。

汇编器MASM78自动生成的绝对列表文件LXH-LED.LST的格式如下:

*******〈SOURCE CODE LIST REPORT BY MASM78.EXE〉*******

FILE:1xh-1ed.ASM

DATE:2002/6/1

------------

 

1 0000        ;**************************************

;   《霹雳灯》

  2 0000        ;   文件名称: LXH-LED.ASM

 

3 0000        ;   使用组件: LED2

 

4 0000        ;**************************************

 

5 0000 SETCHIP EM78447 ;声明模拟仿真的目标单片机型号

 

6 0000 PORT6 ==06H ;定义端口6在RAM内的统一编址

 

7 0000 IOC6 ==06H ;定义方向寄存器6在RAM内的统一编址

 

8 0000 STATUS ==3 ;定义状态寄存器在RAM内的统一编址

 

9 0000 C ==0 ;定义进位标志位的位地址

 10 0000 COUNT ==10H ;在通用寄存器区内定义一个用户变量

11 0000 VALUE ==11H ;在通用寄存器区内定义一个用户变量

 12 0000        ;--------------------------------------

 13 0000 ORG 000H ;设置用户程序在程序存储器内起始存放地址

 14 0000 1800 MOV A,@00H ;给累加器A赋值00H

 15 0001 0006 IOW IOC6 ;将端口6的8条引脚全部设定为输出

 16 0002 18FE MOV A,@11111110B ;给累加器A赋值11111110B

 17 0003 0046 MOV PORT6,A ;仅使P60脚输出低电平

18 0004 0A03 BS STATUS,C ;设置进位位C=1

 

19 0005 1013 CALL DELAY ;调用延时子程序

 

20 0006 1807 LOOP MOV A,@7 ;左移位次数7先送入A

 21 0007 0050 MOV COUNT,A ;再转存到“移位次数计数器”

 22 0008 06C6 LEFT RLC PORT6 ;左移端口数据寄存器6内容,来切换显示

 23 0009 1013 CALL DELAY ;调用延时子程序

 24 000A 05D0 DJZ COUNT ;移位次数计数器递减,结果为0跳一步

 25 000B 1408 JMP LEFT ;结果不为0,跳转到LEFT

 26 000C 1807 MOV A,@7 ;右移位次数7先送入A

 27 000D 0050 MOV COUNT,A ;再转存到“移位次数计数器”

 28 000E 0646 RIGHT RRC PORT6 ;右移端口数据寄存器6内容,来切换显示

 29 000F 1013 CALL DELAY ;调用延时子程序

 30 0010 05D0 DJZ COUNT ;移位次数计数器递减,结果为0跳一步

 31 0011 140E JMP RIGHT ;结果不为0,跳转到LEFT

 32 0012 1406 JMP LOOP ;跳转到LOOP,开始下一个循环

 33 0013 ;-------------------------------------

 34 0013 DELAY ;延时子程序名称,即入口地址标号

 35 0013 1805 MOV A,@05H ;把延时常数值放入A中

 36 0014 0051 MOV VALUE,A ;然后转存到“延时计数器”

 37 0015 0004 D1: WDTC ;看门狗复位清零

 38 0016 05D1 DJZ VALUE ;延时计数器递减,结果为0跳一步

 39 0017 1415 JMP D1 ;结果不为0,跳转到D1

 40 0018 0012 RET ;子程序返回

 41 0019 ;*************************************

 42 0019 END ;通知汇编器源程序结束

   

Total compile line:43  Total error message:0

注:从列表文件的格式中可以看出,总共分为7列。其中,第1列是行号,包括空行在内的每一行都一次分配一个行号;第2列为单片机指令序号,也是在ROM中存放的单元地址;第3列为指令的目标码;第4~7列与源程序文件相同。

汇编器自动生成的符号表文件(或称符号文件)LXH-LED.SYM的格式为:

LOOP 6

LEFT 8

RIGHT e

DELAY 13

D1 15

注:从符号表文件的内容中可以看出,总共分为2列。第1列是地址标号,第2列为该标号对应的ROM单元实际地址。

然后,可以从子目录SIM447下,把该范例程序的机器码目标程序文件“LXH-LED.CDS”,装载到软硬件模拟器中,以便执行和调试。

现在,我们可以开始演示SIM447软硬件模拟器系统的基本功能。具体操作步骤可以是:

1. 使用系统命令“L”(Load,载入范例程序)

>L LXH-LED.CDS↙

>L LXH-LED ↙(也可以省略文件扩展名,而只用LXH-LED)

程序装载成功的话,命令会话区内会出现如下所示的一些提示信息,告知我们:

● 指定文件被装载完成;

● 相应的符号文件也装载完成;

● 可以键入“ESYM”命令来启用符号调试(或叫查错,Debug)功能;

● 对EM78X447的模拟器进行了复位。

此时,SIM447系统对范例程序LXH-LED.CDS准备开始模拟运行。

>L lxh-led

Load Complete

SYMBOL FILE LOAD COMPLATE?

You can type >ESYM to enable sym-bol debug

Reset EM78-447B Simulator O.K.

2. 使用系统命令“G”(Go,运行范例程序)

>g

Press ‘ESC’ to stop program...

该条命令下达后,表示让SIM447系统从第0号程序存储器单元(或从上次程序执行的停止处)开始执行范例程序。程序执行期间,会看到:

(1) 在虚拟组件区中,红色LED在不停地移动显示。同时其他相关的输出型组件也在动态显示,不过我们不应该去关心其他组件的动作,因为它们属于伴随模拟过程产生的一些“副产品”。

(2) 在寄存器状态区,会看到EM78X447内部寄存器的变化情形。红色部分代表未被影响的寄存器内容;墨绿色部分表示在程序执行过程中被刷新的部分寄存器内容。

(3) 如果按一下?邀F9?妖功能键,进入自动单步运行方式,在会话区中会显示程序执行过程中被执行的每一条指令;在此状态之下,如果按动“空格”键,可以暂停程序的执行,再次按动“空格”键(或者其他任意键)程序又继续执行;当重新按动?邀F9?妖时会取消这种显示状态,并且程序的执行速度也会得到提高。

3. 按动?邀Esc?妖键停止程序的执行

在范例程序连续执行的过程中,只要按下?邀Esc?妖键即可回到命令模式。执行过程被停止之后,SIM447会在会话区中显示出如下所示的一条单片机指令,表示当前系统停留在该条指令上,或者说,当前程序计数器PC就指向该条指令,下面即将被执行的就是该条指令。在该例中,表示在虚拟程序存储器(或叫程序缓冲区)中的“0019”号单元里,存放着汇编语言指令“JMP 0017”的十六进制机器码“1417”。

Press ‘ESC’ to stop program...

019:1417 JMP 0017

€?€?>

4. 使用系统命令“Q”(Quit,终止范例程序的运行)

>Q↙ ?

如果您想结束调试过程并且退出SIM447系统,可以在出现命令提示符“>”后,输入“Q”命令。随后系统会在会话区出现一条提示信息“Do you want to save SIM447 environment?”,询问您是否保存目前的调试工作环境(其中包含功能键定义等信息)。此时若键入“↙”或者“N↙”,则不保存环境设置,而结束模拟过程。假如您想保存此时的调试工作环境,可以键入“Y?坻”,以便下次继续运行没有完成的调试过程时,可以恢复到目前的工作环境中。

读者可到我刊网站www.radio. com.cn上下载MASM78汇编器软件。SIM447软硬件模拟器的销售信息可见本刊第10期第69页相关广告。

本期有奖问答的题目是:

1. 汇编器MASM78产生的绝对列表文件(.LST)和符号文件(.SYM)格式是怎样的?它提供了哪些信息?

2. SIM447软硬件模拟器系统的操作步骤是什么?

答案请来信至编辑部,或E-mail至computer@radio.com.cn。

本刊第9期“义隆单片机课堂”有奖问答获奖名单

王宜和 戴孝锋 陈大伟 林 欣 莫威平

时立扬 佟少华 李 清 杜临明 谭 哲

以上读者将收到由义隆公司赠送的IC数据资料光盘。欢迎读者继续积极参加我们的有奖活动!

大海创作室