mon51 发表于 2017-7-15 10:10:43

51 单片机无疑是划时代的产品,把MON51仿真机的一些资料贴出

早期的说明:完全是自行开发。非转载!
MON51仿真机,从第一代开始至今,已经推出了3个不同的版本。性能上有了质的飞跃!原来开发它,也是一个偶然的机会,就是配合实物上课用。当时采用最早的MON51仿真机,用户地址在0X8000,我自己用起来都嫌麻烦,还经常出错,更何况初学者。后来便分析、追踪Keil的输出命令,再配合原来具有的仿真机开发知识(本人原来从事过专业仿真机的开发)。开发出了第1代MON51仿真机,全部是用汇编编制,但当时对Keil的一些特定的命令,没有掌握,自然存在许多BUG。后来通过用户的反馈,都逐一解决,而问题最多的是单片机的FLASHROM损坏,再深入研究,做破坏性的实验后发现,号称10万次的写入,有的只有几千次的寿命。尤其是单步运行区和保存用户程序数据区,损坏的居多。所以决定不再用FLASHROM保存数据,而改成XDATA  RAM保存数据。这样便推出了第2代MON51仿真机,后来发现由于改用RAM保存数据,减少了耗时的FLASHROM操作,无论是跨步,还是单步执行的速度奇快,性能也大大提高,但单步执行区还是存在频繁写入的问题,经过反复推敲,决定采用循环写入法,用多个FLASHROM来做单步执行区,减少对某一个固定字节的写入,从而将寿命问题解决。当时采用一个扇区128个字节,寿命提高14倍。但无论如何也解决不了占用UART口、T2定时器的问题。有些简单用户(初学者),不用开发串口,使用MON51第二代仿真机,还是绝对超值!
       去年至今,有许多学生、工程师、单片机爱好者都希望我能设计出采用USB口通讯、零资源占用的仿真机。我开始并不想再设计,因为网上卖的人太多。但后来觉得技术上实现并不困难,让更多的人掌握单片机技术,使用方便才是关键。所以用C51重新编写了MON51仿真机的源代码,采用C语言编制,主要是为了便于维护和移植。这样就推出了第3代MON51仿真机。用空间换取了FLASHROM的寿命,采用了512个字节来做单步执行区,还做了坏字节标记处理,可以自动跳过坏的字节区。这样FLASHROM的寿命提高了56倍!并且优化了下载程序和断点处理程序,这样一来下载、单步执行等操作速度如飞!释放了UART口、T2定时器是最大的改进!采用USB口通讯,非常适合现在电脑!
现在用SST公司的公版HEX做的仿真机到处都有。为了推广自己的产品,把Keil的许多功能加进来,说成是自己仿真机所具有的。例如:
可单步、断点、全速,可参考变量、RAM变量
支持汇编,C语言,混合调试。
这些难道不是Keil仿真机软件的功能吗?
有的人甚至把仿真空间大小,硬件锁定功能,加以评论。这些对专业人士来说,很可笑!无论如何,没有掌握技术,当出现问题,就说是用户使用不当而蹚塞。。。。。。
 
现在就对一些有针对性的问题,加以回答!如有不对,请指正!
问题:
   1:如何区分是否为SST公司的公版程序?
要区分是否为SST公司的公版程序,只要看它具不具有脱机功能就行。因为SST公司的公版程序是不具有脱机功能的。要加入这个功能,就必须改程序代码。
   2:MON51仿真机的工作原理是什么?
这个问题很专业,也是问的最多。一句话是无法回答的。只能简单说明:就是通过Keil开发平台,将用户的程序下载到MON51仿真机中,根据Keil开发平台的命令,不断地执行用户程序,再将临时数据传回Keil开发平台的过程。MON51仿真机的软件,基本上由:通讯模块、Keil命令解析模块、51系列单片机的指令分析模块、断点处理模块、运行模块、单步执行模块等组成。
3:MON51仿真机的“运行到断点处(光标处)”和“单步运行” 、“跨步”、“全速运行”有什么区别?
这些功能是每一个仿真机所具有的。但它们实现的方法是不同的。MON51仿真机是借用单片机的IAP功能,来实现仿真的。所以上述几种运行模式(除开单步运行),全部改写了用户下载到FLASGROM中的程序代码。在断点表中保存了断点的地址,和用户代码。MON51监控程序,会在用户要设立断点的地址处写入一条指令: LCALL  STOP 。STOP是停止用户程序,保存用户数据,并恢复MON51监控程序的数据后,再进入MON51监控程序的一段处理程序。实际上就是任务切换。当用户执行到断点处时,会通过LCALL  STOP,自动进入MON51监控程序。再把用户的数据发送到Keil平台。
“跨步”运行实际上也是一种变相的断点运行模式。只不过断点,不是用户定义的,而是Keil开发平台计算的。是隐含处理的。
这里很明显,如果改用FLASHROM保存中间数据,则要频繁地删除、写入数据,STOP的执行速度就会明显下降。而用RAM保存,是最快的。而且没有寿命问题。
“全速运行” 有2中方式:
一种是不带中断响应运行。它完全不再受Keil平台的控制,一旦开始运行,用户只有通过手动复位,停止用户程序。
另一种是带中断运行。既勾选Serial Interrupt 选项。这样便会在用户程序的串口中断向量处,写入一条指令LJMP   BREAK ,这样发生中断后,就跳转到MON51监控程序的中断处理程序。BREAK程序判别Keil平台是否发来停机命令。如果是停机命令(0x1B),便会进入STOP程序,保存用户程序数据,并进入MON51监控程序。如果不是,则退出中断程序,继续运行应户程序!这也是所谓的“夭折功能”。它也不是什么新技术,任何仿真机都有。而且实现也很简单!
现在C51-III仿真机由于释放了UART口,所以将中断向量转移到0x3b。
“单步运行”是比较繁杂的一种运行模式。仔细分析51系列单片机的指令,可以知道,虽然有100多条指令,但把转移指令、判位指令、数据转移指令、运算指令等归类后,实际只有10种类型的指令。首先MON51监控程序分析是哪一种指令,如果是转移类指令(LJMP、AJMP 、SJMP、 LCALL、 ACAL、RET、 RETI),MON51监控程直接计算PC指针的地址,并不执行。而其它类的指令则,全部复制到单步执行区(最大9个字节)。再在后面添加2条转移指令 LCALL  STOP 、LCALL  STOP。为什么要2个LCALL  STOP 。主要是用来判别:判位指令是否发生了跳转而设的。进入“单步运行”后,MON51监控程跳转到单步执行区,就可以执行用户的一条指令。然后进入STOP程序。完成一次单步!如果大量采用单步执行的话,单步执行区会被频繁修改,严重影响寿命!这是现在所有采用IAP技术仿真的弊病!如果有个单片机内部有9个字节的RAM执行区就好了,专业仿真机就要下岗了。
实际上MON51监控程在读取、写入特殊功能寄存器时,也要用“单步运行”方法来实现!例如:“mov a,direct ; mov direct,R0”这俩条指令必须要用“单步运行”来实现。如果用户程序有大量的此类指令,寿命问题就会暴露出来。我们做破坏性实验,就是循环执行它。
现在市面上所有的仿真机,都不会去说明FLASHROM是在什么地方被写入?寿命是如何受影响的?也许是扬长避短吧,或许是根本就不知道。
通过上面的分析就知道,FLASHROM中到底是哪里被频繁写入了。有些网站要求,尽量少用“单步”,也就是回避这个问题!
第3代MON51仿真机。采用了512个字节来做单步执行区,还做了坏字节标记处理,可以自动跳过坏的字节区。寿命问题基本解决了!如果需要,还可以扩展到1024个字节。但这样减少了仿真空间。
4:SP堆栈占用了2个字节,是什么意思?
这个问题,我被无数次问起,但我首先问一下:你做的软件预留了多少个字节做堆栈?一般的回答是:把剩余的字节全部做堆栈!试想一下,谁做软件只预留几个字节做堆栈。更何况是2个字节!
MON51监控程占用用户堆栈,是在STOP程序运行时占用的,进入STOP程序时,单片机的硬件已经将PC指针自动压入用户堆栈。此时占用2个字节。随后因为要保护用户的临时数据,必须要用到ACC、DPTR。所以必须先保存好这3个寄存器的值才行。直接压入用户堆栈,最简单!但占用了3个字节!(实际上用户的堆栈,绝对不应该是5个字节的余量)。所以许多网站上,都说采用了新技术,占用2个字节的堆栈。实际上不压入堆栈,用单片机内部不用的寄存器就可以保存就可以了!例如:看门狗寄存器WDTD或IAP操作的寄存器组:SFAL、SFAH、SFDT(但不能用SFCM寄存器)所以SP堆栈占用了2个字节的技术并不神秘!
C51-II仿真机、C51-III仿真机全部是占用2个字节!
5:MON51监控程可以移植到其他公司的芯片上吗?
现在许多专业生产仿真机的公司,他们都可以与Keil开发平台联机。就是用的MON51驱动程序。原理上一样的,只是实现的方法不用而已。所以MON51监控程可以任意移植。但做为简易仿真机,它对单片机有一定的要求:1、必须具有IAP功能。2、启动向量可以控制。现在的华邦、PHILIPS公司的LPC9XX系列等都可以做。但前提是必须要掌握技术和拥有源程序。
6:C51-II仿真机采用XDATA保存数据,哪我要使用它们,怎么办?
       首先我要说明:简单的东西,肯定是有弊端的。现在C51-II仿真机、C51-III仿真机都是采用XDATA保存数据。如果要用它们,就只有自己扩展RAM了。当用户使用自己扩展的外部RAM时(必须定义AUXR寄存器的EXTRAM位!),地址可以从00H开始,连续存放。C51-III仿真机会自动将数据保存到内部XDATA 中,但是当用户使用内部的XDATA时,必须注意要跳开0x180—0x2FF的地址空间。方法可以看C51-III说明书!
这些都是SST芯片的硬件特性感兴趣的用户可以到

wajlh 发表于 2017-7-15 10:12:56

不知道大学是不是还在教 51单片机

mon51 发表于 2017-7-15 10:13:28

现在如果把源程序全部贴出来,就对不起当年购买的许多客户。毕竟网上现在还是有许多商家在卖这类仿真机,虽然有些商家违反协议,也在卖我的源代码。同时也对不起一些研究生,他们的毕业论文也是这个。。。。

mon51 发表于 2017-7-15 10:14:43

mon51 发表于 2017-7-15 10:15:00

mon51 发表于 2017-7-15 10:18:29

mon51 发表于 2017-7-15 10:19:16

higeo 发表于 2017-7-15 10:19:28

没有用过51仿真机,帮顶。另外keil的命令在哪里可以找到?

mon51 发表于 2017-7-15 10:20:07

mon51 发表于 2017-7-15 10:22:02

mon51 发表于 2017-7-15 10:24:08

mon51 发表于 2017-7-15 10:43:35

再来点图片:

mon51 发表于 2017-7-15 10:51:58

一号纵队 发表于 2017-7-15 11:02:42

看得出楼主对51钻研的很透,佩服。。。。

YS126 发表于 2017-7-15 11:17:50

大牛,继续,我来学习的。

powerlabor001 发表于 2017-7-15 11:24:07

钻研51的牛人,:-),mark一把。

snail_dongbin 发表于 2017-7-15 11:32:41

时间真是把杀猪刀,貌似我学习51已经是近10年前的事了。虽然后面也工作用了一两年,后来就转stm32
,当年要是看到这个,绝对是五体投地,不过现在好像对我没什么用处
帮顶。

myrgb 发表于 2017-7-15 11:39:42

从51起步的,现虽现在不用51,感谢楼主的分享。

Ilove51andAVR 发表于 2017-7-15 11:40:00

没用过仿真机,楼主不如开发成品出售吧,我想买一个

hbzxx 发表于 2017-7-15 12:08:39

本帖最后由 hbzxx 于 2017-7-15 12:11 编辑

这货十年前用过,不稳定啊,有时跑着跑着就跑飞了。
最重要的是要占用串口。
记得用的是SST的89C58.
后来买了一个纬福仿真器,那才是真正的仿真器。

ayumi8 发表于 2017-7-15 12:37:01

楼主高手的样子    现在已经不玩C51了   除了没有USB    还是 STM8 比较爽

mon51 发表于 2017-7-15 13:08:31

Ilove51andAVR 发表于 2017-7-15 11:40
没用过仿真机,楼主不如开发成品出售吧,我想买一个

10年前就不做了。现在网上大把的,都是这个HEX。USB接口的很稳定。

mon51 发表于 2017-7-15 13:11:50

hbzxx 发表于 2017-7-15 12:08
这货十年前用过,不稳定啊,有时跑着跑着就跑飞了。
最重要的是要占用串口。
记得用的是SST的89C58.


占用串口的,就不是我设计的了。我的是USB接口。

ssaiwo 发表于 2017-7-15 13:42:27

真想搞个投票,工作以后还用51的人有多少

Wangwy 发表于 2017-7-15 13:55:43

51大牛老司机 佩服 佩服

chenerbox2 发表于 2017-7-15 14:25:00

前几天翻出来放了好久的伟福 v8还是v6仿真器,买来就没用过, 心想这东西没人要了吧, 现在看得赶紧放咸鱼上, 看来还有市场

huangqi412 发表于 2017-7-15 14:34:23

mon51 发表于 2017-7-15 10:13
现在如果把源程序全部贴出来,就对不起当年购买的许多客户。毕竟网上现在还是有许多商家在卖这类仿真机,虽 ...

这个。。。应该只有研究价值了吧,公开坛里也没人会去做实物了。

WHOOK 发表于 2017-7-15 15:26:44

mon51 发表于 2017-7-15 10:13
现在如果把源程序全部贴出来,就对不起当年购买的许多客户。毕竟网上现在还是有许多商家在卖这类仿真机,虽 ...

楼主好纠结,不过也不错,难得有共享成果的想法就值得表扬。

xyz543 发表于 2017-7-15 16:04:41

mon51 兄的作品我一直都收着好好的,另一个我的长官也带回去收藏了,不得不佩服 mon51 兄在这方面的努力与付出。 {:victory:}

dz20062008 发表于 2017-7-15 16:21:16

这个伴随了很多人51学习,现在还有几个sst了

alphax64 发表于 2017-7-15 16:41:41

这个要顶一下,都是干货

Ilove51andAVR 发表于 2017-7-15 17:26:18

mon51 发表于 2017-7-15 13:08
10年前就不做了。现在网上大把的,都是这个HEX。USB接口的很稳定。

楼主不做了好可惜。能不能推荐一下淘宝哪个店铺是采用你的作品的,如果不方便说明,给几个关键字搜索也行,还有怎么分辨哪个产品采用你的第三版的程序?

阿豪博士 发表于 2017-7-15 17:48:56

貌似是 启东那一带的吧……

kebaojun305 发表于 2017-7-15 17:58:08

chenerbox2 发表于 2017-7-15 14:25
前几天翻出来放了好久的伟福 v8还是v6仿真器,买来就没用过, 心想这东西没人要了吧, 现在看得赶紧放咸鱼 ...

最近 还在用伟副的V8/L   不过不是仿真51是仿真196{:titter:}

mon51 发表于 2017-7-15 19:28:52

Ilove51andAVR 发表于 2017-7-15 17:26
楼主不做了好可惜。能不能推荐一下淘宝哪个店铺是采用你的作品的,如果不方便说明,给几个关键字搜索也行 ...

搜51仿真器或C51仿真器或mon51仿真器。就可以了。外型有类似,也有大变化的,只要看看介绍就知道了。

tangnyzl 发表于 2017-7-15 19:47:01

mon51 发表于 2017-7-15 10:13
现在如果把源程序全部贴出来,就对不起当年购买的许多客户。毕竟网上现在还是有许多商家在卖这类仿真机,虽 ...

这个东西,Keil的帮助文件中有详细介绍,安装目录下有源程序,有很多年没玩51了,可能记错

mon51 发表于 2017-7-15 20:38:05

tangnyzl 发表于 2017-7-15 19:47
这个东西,Keil的帮助文件中有详细介绍,安装目录下有源程序,有很多年没玩51了,可能记错 ...

请你将源代码贴出来看看。

sidu320 发表于 2017-7-16 08:36:07

手里有一板TX-1C,不管怎样是它带领我认识了51,然后才能看到很多精彩的帖子,现在没从事这方面工作,但一点也不可惜。

tangnyzl 发表于 2017-7-16 10:11:43

本帖最后由 tangnyzl 于 2017-7-16 10:17 编辑



安装了一下, C:\Keil\C51\MON51 有一个库,反汇编,就可搞到 汇编的源代码,基本不搞51了,这个库,对普通的应用基本够了,当年曾经把51程序干到了 400多KB,8个bank,怀恋那些充满激情的日子{:lol:}

hzpyl 发表于 2017-7-16 10:41:44

在用韩国的51内核的单片机,
自带仿真器接口,

Ilove51andAVR 发表于 2017-7-16 11:33:30

mon51 发表于 2017-7-15 19:28
搜51仿真器或C51仿真器或mon51仿真器。就可以了。外型有类似,也有大变化的,只要看看介绍就知道了。 ...

搜到的都是ssf单片机仿真器,但mon51的是卖源代码的,售价1000+元,真够贵的了。真找不到出售mon51仿真器的成品,好可惜。

McuPlayer 发表于 2017-7-16 11:35:49

我也在做8051调试器,是跟MCU厂家做配套,主要是jtag的也有2线的,目前已实现的IP有R8051系列、DCD8051系列
上位机一个Keil的DLL插件,下位机用STM32来做

这个东西,技术投入大,汇报不高,不过至少比做ARM调试器回报要高一点,呵呵

su33691 发表于 2017-7-16 11:57:23

    手头有周力功(致远电子)的编程器和仿真器,从来没有用过。现在用stc的U7/U8编程器。
51用c编程简单又方便,大多数应用前后台+状态机即可。注意临界区的变量处理,通过逻辑分析仪和示波器修改时序。也就罢了。

gongxd 发表于 2017-7-16 14:18:14

能不能做个51的虚拟机软件,跑在stm32里面,再附带加密等功能,应该有市场

mon51 发表于 2017-7-16 16:01:00

gongxd 发表于 2017-7-16 14:18
能不能做个51的虚拟机软件,跑在stm32里面,再附带加密等功能,应该有市场

2014年已经做了,在STM32F205里跑,但速度不行,全是软件解释执行。对方付了1000元。无下文了。

wkman 发表于 2017-7-16 16:54:12

{:titter:}mon51方正,十五年前还有点意思,,可惜当年的红极一时sst都被并购消失了{:titter:}

srygg 发表于 2017-7-16 17:38:26

十多年前买个万利51的仿真器要2000元,不知道为什么要这么贵。

wsq0389 发表于 2017-7-16 21:31:44

现在我51刚起步,楼主已经这么牛了

ilikemcu 发表于 2017-7-16 22:00:16

虽然从未用过仿真器调试,从来都是ISP,没ISP的年代用仿真器当ISP用(◔◡◔),佩服楼主这样的牛人,顶一个╰(*´︶`*)╯

huangqi412 发表于 2017-7-17 09:42:42

mon51 发表于 2017-7-16 16:01
2014年已经做了,在STM32F205里跑,但速度不行,全是软件解释执行。对方付了1000元。无下文了。 ...

{:lol:}现在F7都有了 F7模拟速度能凑合么

taoxy_wx 发表于 2017-10-25 14:11:39

这个必须支持

wkman 发表于 2017-12-11 21:37:50

这mon51文章如果出现在2005年之前,还有点用处{:titter:}{:victory:}

soos 发表于 2017-12-11 22:06:26

现在应该没有人会买这个了吧!

cat_li 发表于 2017-12-12 10:15:15

用过楼主的产品,确实很不错

Qhjh 发表于 2017-12-12 11:09:23

国内最早搞出来的是ETOOL,然后丁丁,老古。 03年通过老古的MON51专栏和丁丁的一个IAP源码摸索了半年时间,搞出来蛮有成就感的。但因为51的RAM太小,后来用了M64,M128,对51彻底放弃了。   

wx85105157 发表于 2017-12-12 11:28:29

比较好奇的是不占用串口和t2是怎么实现的

lvxinchao-206 发表于 2021-5-17 21:20:09

楼主 功夫蛮神的啊

xdming 发表于 2021-11-1 21:07:09

今天积分不够了,明天再来下载!

xdming 发表于 2021-11-2 10:08:33

mon51 发表于 2017-7-15 10:15


大神,求命令表的来源!!!

njl2008 发表于 2022-8-21 10:36:26

学习中,感谢楼主分享
页: [1]
查看完整版本: 51 单片机无疑是划时代的产品,把MON51仿真机的一些资料贴出