搜索
bottom↓
回复: 33

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

[复制链接]

出0入0汤圆

发表于 2014-7-13 17:03:19 | 显示全部楼层 |阅读模式
本帖最后由 rain73 于 2014-7-13 19:16 编辑

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

使用示例
先看一下 help 的内容:


目前有四个指令,getr(读寄存器),setr(写寄存器),geti(读内存),seti(写内存)。
示例:读P0口内容
DEBUG-51> getr p0
p0:FFH

示例:写P1口内容
DEBUG-51> setr p1 0x0F

示例:读0x80内存地址内容
DEBUG-51> geti 0x80
80H:00H

示例:写0x80内存地址内容
DEBUG-51> seti 128 255

调用方法
假设你的主程序是这样的:
#include <REG51.H>
#include "DEBUG51.H"

sbit LED = P0^0;

/* 主函数 */
void main()        {
        UART_Init();        //串口初始化
       
        while (1) {
                LED = ~ LED;
                Delay_1ms();
                debug51();
        }
}

只需加入上面标注为红色的三行代码(debug51()函数必须放在主循环中),就可以调用人机交互调试器了。加入调试器的功能后,不会影响
原有程序的功能,但由于波特率中断的影响,主程序运行将会变慢。
当然还要把库文件放至你的工程项目中,下载后面的附件 DEBUG51.rar ,然后把里面的两个文件(DEBUG51.H, DEBUG51.LIB)解压至你的
项目目录中,再在工程中引用一下DEBUG51.LIB即可:


然后重新编译你的项目,下载至单片机中,就可以使用调试器了!

连接至PC
把单片机与PC间通过串口线连接好后,就可以测试通信状况了。PC端通信软件可以用超级终端,推荐使用SecureCRT,设置好通信参数:
端口(根据串口线连接设置),波特率(9600),数据位(8),奇偶校验(无),停止位(1),数据流控制(全部无)
然后打开刚设置的连接,再上电或复位单片机,如没什么意外,应该可以接收到欢迎信息:


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

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

下一步准备开发的功能,可以读写内存块,例如连续读出一个数组,或许还能做到单步执行的功能。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-7-13 17:36:10 | 显示全部楼层
觉得读写变量的值才有用。用C不太关心内存地址。

出10入113汤圆

发表于 2014-7-13 18:03:41 | 显示全部楼层
挺好的,高手都需要用到汇编的。            

出0入0汤圆

发表于 2014-7-13 18:04:32 | 显示全部楼层
LIB...?这个没什么神秘的。。。

出0入0汤圆

发表于 2014-7-13 18:12:14 | 显示全部楼层
想法很独特,不过俺习惯使用LCD或者数码管来调试,显示的内容多,速度够快,而且也很直观。。。嘿嘿

出0入0汤圆

发表于 2014-7-13 18:23:31 | 显示全部楼层
楼主开放源代码吧。

出0入0汤圆

 楼主| 发表于 2014-7-13 18:28:34 | 显示全部楼层
czg1411 发表于 2014-7-13 17:36
觉得读写变量的值才有用。用C不太关心内存地址。

当要深入一点时,就需要关心内存。再一个有keil这样的编译环境,还怕找不到变量?

出0入0汤圆

 楼主| 发表于 2014-7-13 18:46:52 | 显示全部楼层
lswhome 发表于 2014-7-13 18:12
想法很独特,不过俺习惯使用LCD或者数码管来调试,显示的内容多,速度够快,而且也很直观。。。嘿嘿 ...

有电脑显示屏多和快?我就是因为LCD显示的内容太少了才另外搞的这个。把 idata, xdata, code 全部读出来都没有问题!

出0入0汤圆

发表于 2014-7-13 18:48:28 | 显示全部楼层
预编译,一个定时器,任意一个IO=模似串口

出0入0汤圆

发表于 2014-7-13 19:05:01 | 显示全部楼层
饭桶 发表于 2014-7-13 18:03
挺好的,高手都需要用到汇编的。

现在用汇编的大部分是C写的程序放不下或C编译器不好用。。

出100入85汤圆

发表于 2014-7-14 13:51:53 | 显示全部楼层
开源吧,现在用51的年轻人不多了。
或者把东西升级到ARM上或许还能用用

出0入0汤圆

发表于 2014-7-14 18:25:59 | 显示全部楼层
rain73 发表于 2014-7-13 18:46
有电脑显示屏多和快?我就是因为LCD显示的内容太少了才另外搞的这个。把 idata, xdata, code 全部读出来 ...

不是的,你单片机要和电脑通信,速度也就是9600bps,能有多快?再说了,谁调试程序会经常调试到整个内存,一般也就是观察几个变量而已,超过10个的都不多吧。。。要速度快,数码管是最快的,LCD次之,串口连电脑,速度是最慢的。慢速的,调试一些要求速度的算法,根本就没法调试。。。因为调试代码放进去,就会导致原本的程序时序出问题,根本就没法调试!

出0入0汤圆

 楼主| 发表于 2014-7-14 20:03:23 | 显示全部楼层
lswhome 发表于 2014-7-14 18:25
不是的,你单片机要和电脑通信,速度也就是9600bps,能有多快?再说了,谁调试程序会经常调试到整个内存 ...

速度快了你看得过来?就算9600的速率在LCD或LED上显示,就是模糊一片,这有什么意义?串口输出显示可以在屏上留历史数据。
只观察几个变量,直接可以用KEIL的仿真调试就行。如果你用到64K外存,或SD卡之类,要观察这些海量数据,你只能望洋兴叹了吧?

出0入0汤圆

 楼主| 发表于 2014-7-14 20:47:40 | 显示全部楼层
串口调试的好处是显而易见的。目前这个实现是工作于被动模式,在我的实现里还有一种主动模式,这就跟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)

出0入0汤圆

发表于 2014-7-14 20:55:25 | 显示全部楼层
本帖最后由 lswhome 于 2014-7-14 20:57 编辑
rain73 发表于 2014-7-14 20:03
速度快了你看得过来?就算9600的速率在LCD或LED上显示,就是模糊一片,这有什么意义?串口输出显示可以在 ...


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

出0入0汤圆

 楼主| 发表于 2014-7-14 21:05:10 | 显示全部楼层
lswhome 发表于 2014-7-14 20:55
晕倒,有种东西叫OLED,呵呵,速度还是非常快的,海量的数据,那就还是串口输出,呵呵。。。这个是没办法 ...

其它不论了,就你提到的显示速度,刷屏快了你的眼睛能反应过来,不是模糊一片?这可不是放视频啊。

出0入0汤圆

发表于 2014-7-15 10:32:47 | 显示全部楼层
不错,调试的另一种方法,顶楼主

出0入0汤圆

发表于 2015-11-7 23:24:46 | 显示全部楼层
楼主那个不开源么

出0入10汤圆

发表于 2015-12-9 16:52:34 | 显示全部楼层
搞arm的就呵呵了,直接debug好多了,什么变量,什么内存都可以看到!

出0入10汤圆

发表于 2015-12-9 16:52:56 | 显示全部楼层
搞arm的就呵呵了,直接debug好多了,什么变量,什么内存都可以看到!

出0入0汤圆

发表于 2015-12-11 16:40:22 | 显示全部楼层
我点下载,链接别禁掉,有这样的情况吗?

出0入0汤圆

发表于 2016-4-11 11:27:58 | 显示全部楼层
顶楼主,读内存块的功能,现在出了吗,我是你粉丝

出0入0汤圆

发表于 2016-4-11 11:36:52 | 显示全部楼层
还是调试仿真好点,或者加显示器直观

出0入0汤圆

发表于 2016-4-11 11:38:04 | 显示全部楼层
不喜欢用来源不明的所谓 “库”,,,,

出0入0汤圆

 楼主| 发表于 2016-4-11 19:08:22 | 显示全部楼层
风雨无阻88 发表于 2016-4-11 11:27
顶楼主,读内存块的功能,现在出了吗,我是你粉丝

在去年发这个贴之后就已经完成了,不过看大家兴趣不大,就没有整理发上来。不同的是主贴这个版本是在STC89下开发的,
后来的版本是在STC15下开发的,添加了很多寄存器,基础功能在两种MCU下应是一样的。
有兴趣的话我整理发上来。

出0入0汤圆

 楼主| 发表于 2016-4-11 19:10:00 | 显示全部楼层
wkman 发表于 2016-4-11 11:38
不喜欢用来源不明的所谓 “库”,,,,

这是调试库,不是应用库,有问题也不影响你的程序的,呵呵。

出0入0汤圆

发表于 2016-4-11 20:56:55 | 显示全部楼层
好资料,非常感谢。

出0入0汤圆

发表于 2016-4-11 21:11:41 | 显示全部楼层
楼主有意的话,就开放源码,大家一起完善一下

出0入0汤圆

 楼主| 发表于 2016-4-12 00:42:11 | 显示全部楼层
zhongsandaoren 发表于 2016-4-11 11:36
还是调试仿真好点,或者加显示器直观

你的方法有几个功能看好不好做?
1、连续输出一个页面512字节的数据;
2、输入不同的地址、不同的数据测试函数正确性,测试器件的功能是否正确;
3、省去了键盘的输入与显示的输出,针对核心功能进行开发,提高效率;
运用得好,可以省却很多烧写次数,并轻松测试逻辑的正确性。

通过这个交互程序,我在开发中效率提高不少,并发现了很多器件的细节,对完善程序有很大的好处。

出0入0汤圆

发表于 2016-4-12 01:02:59 | 显示全部楼层
Is it also suitable for stc-51? Or just only at89s51?  

出0入0汤圆

 楼主| 发表于 2016-4-12 11:12:26 | 显示全部楼层
YS126 发表于 2016-4-12 01:02
Is it also suitable for stc-51? Or just only at89s51?

其实差别仅在于串口的配置,主楼那个库应适用于所有兼容INTEL 51串口的所有MCU。
如果修改源代码,可适用于所有带串口的MCU,包括STM32。

出0入0汤圆

发表于 2016-4-12 11:22:04 来自手机 | 显示全部楼层
学习了……

出0入0汤圆

发表于 2016-4-12 11:29:04 | 显示全部楼层
楼主开放源代码吧。

出105入79汤圆

发表于 2018-4-16 13:34:20 | 显示全部楼层
支持,串口打印时最快的,而且可以生成记录文件,打印微秒级时间戳。LED灯和OLED的输出不能持久化。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 17:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表