用KEILC51环境剖析和移植MON51监控程序的方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.在UV3中建造你自己的工程(注意,用户程序只能在2000H以上的空间监控程序本身要占用前面的部分空间,编译后,进入DEBUG(用keil montor-51 drive,com2,57600).如果没有错误,就发现联机成功了.此时,你再UV3中调试你的应用程序.在UV2中随时观测MON51.ASM的运行状态.此时,在UV2的SERIAL WINDOWS#1中就可以看到钢材启动过程中的MON51发给KEIL(UV3)的数据了,(注意WINDO是用KEIL51的模拟器,配合脚本实现冯.诺依曼结构(相当于MON51板)和串口重定向的模拟运行来虚拟一个可以和PC外部联机的mon51仿真器.用KEIL51的另一个进程,来运行用户开发环境和用户程序.整个过程双方(仿真器监控程序和用户程序)都可以跟踪分析,MON51的全部工作过程尽收眼底!
1.按MON51的方法编译一个MON51.HEX(有现成的下),反汇编好MON51.HEX文件,整理部分主要标号..成为你的分析和移植的源程序MON51.ASM(不会编译可以找个现成的MON51.HEX,本人有符号化的反汇编程序),
到的软件下载_
2改造一下MON51.ASM,将其中通信速率自动检测部分跳过,改成固定值,我的时间常数用最短的(如果只是模拟运行分析,定时器时间参数不影响重定向到PC串口的速率,但太长通信不不上)
7.但此时,还不能运行你的用户程序,因为,在UV2的MON51.ASM中并没有你的用户程序,没有程序的地方在模拟器是不能运行的,会被UV2强制停止,(此功能在一般的模拟调试中很容易用来查堆栈错误),所以还得在你想要放用户程序的地方定义一下程序保留空间.在重复上面的5,6步,就可以了.
8.如过你要观察两者之间的详细通信数据和过程,就在第6步之前,安装启动运行sermon或ACCEESSPORT,创建一个会话,监视COM2
3.建造一个DEBUG.INI.这是一个KEILC51模拟器的一个交互式操作的描述文件,
用来实现MCU51模拟器的程序和外部数据空间的统一(相当与PSEN和RD合并,参见
丁丁的:实现MCU51的冯.诺依曼结构仿真的方法.),同时将MCU的串口定向到PC的串口,如COM1,速率到38400
以上,(太小了,不能及时响应KEILC的应答,联机不上,该文件内容如下,也可以到软件下载).该文件(注意,debug.ini文件要最后多空一行)
FUNC void x(void)
{
_WBYTE(0xff000000+DPTR,ACC); //将写入xdata的数据也写入到对应地址的code中
printf("\n%04X:%02X",DPTR,ACC); //这句是监视写入的字符,会在command窗口打印出来,可以注释掉
准备:
A.51反汇编程序(如果不想用,就下载反汇编好了的现成ASM程序)
B.KEILC51软件,
C.外壳型串通信监视软件sermon(可选,ACCESSPORT 用来观察通信协议和过程的),
D.一条PC的RS232口通信线(双DB9母头,2,3交换接,5脚直接接就OK,或者虚拟串口软件Virtual Serial Port Driver)
}
4.将通信线连接PC的COM1和COM2(最好开KEILC运行的两个进程,第一个(建议用UV2)用来运行MON51.ASM,
第二个(建议你用UV3)用来运行你的应用程序(测试仿真器用).(uv2,uv3并用这样都有一个缺省工程自动打开,提高效率)
5.将uv2启动DEBUG(USE SIMULATOR)状态,运行mon51.asm前启用DEBUG.INI(在DEBUG-->Functon Edit下打开,编译无错即可,此时,此处只描述脚本编译,不是程序,此时),然后运行MON51.ASM
在进行下面的步骤,就可以看到往来的数据按时间先后分开显示,十分清晰.甚至还可以在CONSOL窗口观察到那些单元是作为MON51的数据使用,此时,你就可以测试分析MON51的个部分
功能和程序了.注意,SERMON不同与一般的串口监视程序,本身不独占COM端口,而是包在其外,当有其他程序使用被监视的端口,所有操作包括对COM状态寄/控制存器的操作都可以监视到.
另:本包内的MON51.ASM已经修改成可以直接编译的程序,改动部分为与DEBUG 条件便宜相关的部分,注释了Q00F3: 处的几个语句(自动通信速率检测部分的). 如果去掉注释,#DEFINE DEBUG 0,则编译出来的代码可以在MON51板上运行!
9.移植MON51只要将与定位有关的全部标号化,规划好MON51的工作数据空间(fLASH,RAM都可以),改写对工作数据空间和写入用户程的部分,对多个BLOCK的MCU,还要考虑换块和块映射的问题.
以上过程我已经完整实现,分析了MON51,SST的SOFTICE等几个不同版本的仿真器监控程序..需要这方面资料的人可以联系我.qq:14682937.上面用到的工具软件和文件,欢迎有共同爱好的朋友交流.
MON51的监控程序只提供了LIB文件,自己生成HEX文件.找不到有关MON51通信协议的资料.给分析MON51的同志带来难度.
用本方法可以非常详细的得到各种数据,并可以动态跟踪分析MON51的程序运行过程,整个过程而只需要一条通信线一台PC(主频400m以上就可以了).本方综合了常用的调试分析方法,用到了一些非常有用监视工具,对有一点基础的你很有帮助哟.如果你想设计自己的MON51兼容仿真器,这就是最好途径了.
MODE COM1 57600, 0, 8, 1 //设置PC的COM1通信速率
ASSIGN COM1 <SIN >SOUT //将MCU51的UART定向到PC的COM1
BK * //清除所有断点
BS _RBYTE($)==0xf0, 1, "x()" //加入监测是否运行到movx @dpta,a指令的断点
相关文档
最新文档