收藏 分享(赏)

Keil软件仿真的串口调试技巧.doc

上传人:精品资料 文档编号:10811272 上传时间:2020-01-10 格式:DOC 页数:7 大小:77.50KB
下载 相关 举报
Keil软件仿真的串口调试技巧.doc_第1页
第1页 / 共7页
Keil软件仿真的串口调试技巧.doc_第2页
第2页 / 共7页
Keil软件仿真的串口调试技巧.doc_第3页
第3页 / 共7页
Keil软件仿真的串口调试技巧.doc_第4页
第4页 / 共7页
Keil软件仿真的串口调试技巧.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、Keil 软件仿真的串口调试技巧引言在单片机系统中,串口(uart, 通用异步收发接口)是一个非常重要的组成部分。通常使用单片机串口通过 rs232/rs485 电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。rs232/rs485 串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。在单片机编程中,串口占了很重要的地位。传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。在编写好程序后,利用仿真器来设置断点,观察变量和

2、程序的流程,逐步对程序进行调试,修正错误。使用硬件仿真器的确是很有效的方法,但是也有一些缺点: 很多仿真器不能做到完全硬件仿真,因而会造成仿真时正常,而实际运行时出现错误的情况;也有仿真不能通过,但是实际运行正常的情况。 对于一些较新的芯片或者是表面贴装的芯片,要么没有合适的仿真器或仿真头;要么就是硬件仿真器非常昂贵,且不容易买到。 有时由于设备内部结构空间的限制,仿真头不方便接入。 有的仿真器属于简单的在线仿真型,仿真时有很多限制。例如速度不高,实时性或稳定性不好,对断点有限制等,造成仿真起来不太方便。1 调试前的准备工作下面介绍一种利用 keil 的软件仿真功能来实现 51 单片机串口调试

3、用户程序的方法。使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。所需的只是: 硬件。台普通计算机(需要带有 2 个标准串口)和根串口线(两头都是母头,连线关系如图 1所示)。 串口软件可以是自己编写的专用调试或上下位机通信软件,也可以是通用的串口软件(如串口助手、串口调试等),主要用来收发数据。如果没有合适的串口调试软件 ,则可使用笔者编写的一个免费的串口小工具 turbocom。除了与其他软件一样的数据收发功能外,它还有定时轮流发送自定义数据帧和自动应答(接收到指定数据帧后,自动返回相应的数据帧)这两个很有用的功能,特别适合于老化测试。这个小工具可以从 http: / 下载。2 基

4、本调试命令介绍这个串口调试方法主要是利用了 keil 强大的软件仿真功能。在新版本(高于 6.0)的 keil 软件中,增强了软件的仿真能力,可以利用软件仿真更多的单片机功能。在这些功能中,其中有一个很重要的功能就是利用计算机的串口来模拟单片机的串口(这不同于很多软件在仿真时使用的激励文件方式,可以直接与其他串口进行通信,更加方便、灵活)。首先要介绍仿真时需要使用的两个命令:assign 和 mode。2.1 assign 命令将单片机的串口绑定到计算机的串口。基本使用方式为:assign channeloutreg其中: channel 代表计算机的串口 ,可以是 com1、com2、com

5、3 或 com4;而 inreg 和 outreg 代表单片机的串口。对于只有一个串口的普通单片机,即 sin 和 sout;对于有两个或者多个串口的单片机 ,即 snin 和snout(n=0,1, 即单片机的串口号)。图 1 串口连线示意图例如:assign com1sout将计算机的串口 1 绑定到单片机的串口(针对只有一个串口的单片机)。assign com2s0out将计算机的串口 2 绑定到单片机的串口 0(针对有多个串口的单片机,注意串口号的位置)。需要注意的是,参数的括号是不能省略的,而 outreg 则是没有括号的。2.2 mode 命令设置被绑定计算机串口的参数。基本使用方

6、式为:mode comx baudrate, parity, databits, stopbits其中: comx(x = 1,2,)代表计算机的串口号;baudrate 代表串口的波特率 ;parity 代表校验方式;databits 代表数据位长度;stopbits 代表停止位长度。例如:mode com1 9600, n, 8, 1设置串口 1。波特率为 9 600,无校验位,8 位数据,1 位停止位。mode com2 19200, 1, 8, 1设置串口 2。波特率为 19 200,奇校验,8 位数据,1 位停止位。使用以上两个命令,就能够将计算机的串口模拟成单片机的串口了。在进行软

7、件仿真时,所有发送到被绑定的计算机串口上的数据都会转发到 keil 模拟的单片机串口上,用户程序可以通过中断处理程序或查询方式接收到这些数据;同样,单片机程序中发送到单片机串口上的数据也会通过被绑定的计算机串口发送出来,可以被其他软件所接收。利用这个特点,就可以方便地仿真、调试单片机的串口部分程序。要注意的是,这两个命令需要一起使用。2.3 仿真步骤首先,用串口线将计算机的两个串口连接起来(或者是两台计算机上的两个串口)。这两个串口一个用来模拟单片机串口,另一个给调试程序使用。这个由用户自己分配,没有特殊要求。其次,编写好用户程序,并编译通过。然后,设置工程文件(project)的相关参数,如

8、图 2 和图 3 所示。主要是选择软件仿真模式(use simulator)以及晶振参数。图 2 仿真参数设置为了不必每次进入仿真状态后,都需要输入串口参数设置命令,可以建立一个初始化文件。初始化文件是一个普通的文本文件,内容就是仿真时需要的命令,按照顺序一行输入一条。如图 2 所示,建立了一个debug.ini 的初始化文件。这样,当每次进入仿真调试状态时,keil 就会自动载入 debug.ini 的内容进行初始化。图 3 晶振参数设置为了正确仿真串口,在软件仿真调试时,在用户的 keil 工程文件的属性中,还需要设置实际使用的晶振频率。这个参数非常重要,直接影响通信的波特率,可以按照实际

9、使用的参数进行设置。要注意,这个参数的单位是 mhz。设置好参数后,就可以进行仿真了。单击工具栏的图标进入 debug(仿真调试)状态,在 output window窗口中的 command 文本框(一般是在左下角)中输入上面介绍的命令。例如,将 pc 机的串口 1 设置为单片机的串口:mode com1 9600,0,8,1assign com1 sout然后设置断点,一般是在关键地方或与串口相关联的地方设置。再单击图标运行(run)用户程序,使用户程序运转起来(不然是接收不到串口数据的)。这时再使用串口调试软件或用户调试软件,发送通信命令或者数据包,看用户程序是否进入断点,以及相关的变量是

10、否正确。还可以有意发送带有错误数据的数据包,以观察用户程序的异常处理部分是否正常。一旦发现程序中的错误,可以马上停止仿真调试,立即修改代码,然后再次重复上面的步骤进行仿真。因为不需要与用户目标板联机,也不用下载代码到用户板上,所以速度非常高。以上这些步骤和使用硬件仿真器的基本一样,只不过现在使用的是软件仿真。需要注意的是:仿真时单片机串口实际的波特率由 mode 命令来指定,单片机程序中的 tmod、scon 等参数是不影响串口仿真状态的(也就是说这些参数不影响仿真的波特率,即使它们是错误的)。但是中断的使能位(如 es、ea 等)还是起作用的,如果 es 或 ea 被禁止,那么就不会进入串口

11、中断。因为这种方法是利用计算机的串口来仿真单片机的串口,而仿真是通过 keil 软件来转换串口上的数据,不是直接转发数据的,所以在实际仿真时,处理速度会比实际单片机运行时稍微低一点。比方说仿真状态时1 s 只能发送/接收 10 个数据帧,但在单片机硬件上运行时可能 1 s 就可以接收/发送 50 个数据帧。这与使用的计算机的速度有关,但对仿真来说,是没有任何影响的。对于多串口的单片机,从理论上来说,可以一次绑定多个串口,只要计算机有足够多的串口。基本上,使用这种方法需要占用计算机的串口数量是单片机绑定串口的 2 倍。一个串口被 keil 占用,用来模拟单片机的串口;另外一个串口被计算机占用,用

12、来给单片机的串口收发数据。3 小结这里介绍的方法对 c51 和汇编语言都是适合的。它最大的好处就是简单、方便,容易使用,不需要使用任何电路,也没有特殊的要求;甚至可以在硬件电路制作好之前就将串口部分的程序编写、调试完毕。笔者使用这种方法已经很长时间了,事实证明这种方法确实非常有效。其实对于 51 单片机,keil 的仿真功能实在是太强大了,只要充分掌握其特点,能够熟练利用它,就可以解决工作中的大部分问题。很多工作都可以使用软件仿真来完成,根本无需任何硬件仿真器;只有一些新的外部器件的时序、接口的调试才有可能需要用到硬件仿真器。目前介绍 keil 软件仿真这方面的参考书籍很少,有些讲的还是老版本

13、的用法,不过没有关系,keil 的帮助文件写得很详细、很清楚,只要认真看明白就会使用了。使用熟练后,就会发现 keil 的功能相当强。对于串口编程,51 单片机有 keil 这个功能强大的开发软件,给我们带来了极大的便利;而在其他单片机软件的开发中,目前还没有这么强大的开发工具和方便的调试手段。这里有个变通的办法,就是可以先在 keil中编写并调试好串口程序,然后将程序移植到其他单片机平台中(笔者在 pic18 单片机开发中就使用了这种方法,收到了很好的效果。当然这是指在使用 c 语言开发单片机程序时,汇编语言是没有可移植性的)。至于如何能够减小程序移植的工作量,使得程序具有更好的通用性,以最小的代价就可以平滑地移植到其他单片机平台上,也是一个非常值得探讨的问题。另外,为了方便初学者掌握这种方法,笔者专门做了一个例子程序,放在 http:/ 上,可以用来练习。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报