51单片机串口人机交互调试器 [原创首发]

2020-01-14 18:53发布

本帖最后由 rain73 于 2014-7-13 19:16 编辑

调试51单片机,很多时候需要实时了解各个存储器(寄存器)的值,或者需要修改其中的值,通常的办法是增加调试代码来完成,最后再将其删除。
过程既麻烦又不方便,那么有没有什么好的办法呢?这个串口人机交互调试器就能帮到你。
其原理是通过51单片机的串口与PC通信,PC发送指令,然后单片机执行指令完成相应的功能。目前调试器的代码暂不开源,以库的形式发布给
大家使用。

使用示例
先看一下 help 的内容:
DEBUG51_02.jpg (20.38 KB, 下载次数: 0) 下载附件 2014-7-13 17:53 上传

如没有正确接收到信息,主要跟晶振频率有关,默认的晶振频率是11.0592MHz,这个频率适合于串口通信,如果不能更换晶振,也可以改为其它的
频率。修改 DEBUG51.H 中的 XTAL 值即可,如果是12MHz晶振,最好把波特率同时改为4800,这样误差小一点。

对于命令的使用方法,可随时键入 help 或 ? 即可显示,需注意一点,所有命令及参数都必须小写。

下一步准备开发的功能,可以读写内存块,例如连续读出一个数组,或许还能做到单步执行的功能。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
rain73
1楼-- · 2020-01-16 13:03
串口调试的好处是显而易见的。目前这个实现是工作于被动模式,在我的实现里还有一种主动模式,这就跟LCD的作用无差异了,缺点是需要增加调试代码。
在任何地方都可以直接调用,输出就在电脑屏幕上:
UART_ShowBin1(unsigned char Data);                //把数据以二进制字面值显示(00000000~11111111)
UART_ShowHex1(unsigned char Data);                //把数据以十六进制字面值显示(00~FF)
UART_ShowHex2(unsigned int Data);                //把数据以十六进制字面值显示(0000~FFFF)
UART_ShowDec(int Data);                                //把数据以十进制字面值显示(-9999~9999)
lswhome
2楼-- · 2020-01-16 13:19
本帖最后由 lswhome 于 2014-7-14 20:57 编辑
rain73 发表于 2014-7-14 20:03
速度快了你看得过来?就算9600的速率在LCD或LED上显示,就是模糊一片,这有什么意义?串口输出显示可以在 ...


晕倒,有种东西叫OLED,呵呵,速度还是非常快的,海量的数据,那就还是串口输出,呵呵。。。这个是没办法的事,我不是说串口不好,只是在一些要求实时观察并且对时序要求比较严格的程序里调试,用串口不太方便,调试的方法多的是,能够采用合适的调试方法去调试才是王道。
曾经见过有的人调试代码,那真是为了调试而调试,比如他的程序要通过串口通信,同时还非要用串口去调试,搞的焦头烂额的,何苦呢?一个12864就轻松搞定。。。
rain73
3楼-- · 2020-01-16 16:42
lswhome 发表于 2014-7-14 20:55
晕倒,有种东西叫OLED,呵呵,速度还是非常快的,海量的数据,那就还是串口输出,呵呵。。。这个是没办法 ...

其它不论了,就你提到的显示速度,刷屏快了你的眼睛能反应过来,不是模糊一片?这可不是放视频啊。
yayagepei
4楼-- · 2020-01-16 17:08
 精彩回答 2  元偷偷看……
3050311118
5楼-- · 2020-01-16 19:22
楼主那个不开源么
10xjzheng
6楼-- · 2020-01-16 19:42
搞arm的就呵呵了,直接debug好多了,什么变量,什么内存都可以看到!

一周热门 更多>