2024年3月27日发(作者:)

在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的构成部分。凡是使用单

片机串口通过RS232/ RS485电平转换芯片与上位机毗连,以进行上位机与下位机的数值

互换、参量设置、构成收集以及各种外部设备的毗连等。RS232/ RS485串行接口总线具

备成本低、简略可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别

对于数值量不是很大的场所,串口通信仍然是很好的选择,有着广阔的使用远景。 在单片机

编程中,串口占了很重要的地位。传统方式串口程序的调试,往往是哄骗专用的单片机硬件仿

真器。在编写好程序后,哄骗仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调

试,批改错误。使用硬件仿真器的确是很有效的方法,但是也有一些缺点: 很多仿真器不克

不及做到完全硬件仿真,因而会造成仿真时正常,而实际运行时呈现错误的环境;也有仿真不

克不及通过,但是实际运行正常的环境。 对于一些较新的芯片或者是外貌贴装的芯片,要么

没有合适的仿真器或仿真头;要么就是硬件仿真器非常昂贵,且不易买到。 有时候由于设备

内部结构空间的限制,仿真头不利便接入。 有的仿真器属于简略的在线仿真型,仿真时有很

多限制。例如速度不高,及时性或不改变性别不好,对断点有限制等,造成仿真起来不太利便。

1 调试前的准备工作 底下先容一种哄骗Keil的软件仿真功能来实现51单片机串口调试用

户程序的方法。使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。所需的只是:

① 硬件。1台普通计算机(需要带有2个标准串口)和1根串口线(两头都是母头,连线瓜葛如图

1所示)。 ② 串口软件可所以自己编写的专用调试或上下位机通信软件,也可所以通用的串

口软件( 如串口助手、串口调试等) ,首要用来收发数值。如果没有合适的串口调试软件,则

可使用作者编写的一个免费的串口小工具TurboCom。除了与其它软件一样的数值收发功

能外,它还有定时轮流发送自界说数值帧和自动应答(接收到指定命据帧后,自动返回相应的

数值帧)这两个很有用的功能,特别适合于老化测试。这个小工具可以从http: //

shaoziyang. bloger. com. cn下载。 2 基本调试命令先容 这个串口调试方法首要是

哄骗了Keil强大的软件仿真功能。在新版本(高于6.0)的Keil软件中,增强了软件的仿真能

力,可以哄骗软件仿真更多的单片机功能。在这些个功能中,其中有一个很重要的功能就是哄

骗计算机的串口来摹拟单片机的串口(这不同于很多软件在仿真时使用的激励文件方式,可

以直接与其它串口进行通信,更加利便、灵活)。首先要先容仿真时需要使用的两个命

令:ASSIGN和MODE。 将单片机的串口绑定到计算机的串口。基本使用方式为: 其

中:channel代表计算机的串口,可所以COM1、COM2、COM3或COM4;而inreg和outreg

代表单片机的串口。对于只有一个串口的普通单片机, 即SIN和SOUT;对于有两个或者多

个串口的单片机,即SnIN和SnOUT(n =0 ,1 ,…即单片机的串标语)。 图1 串口连线表

示意思图 例如:ASSIGN COM1SOUT 将计算机的串口1 绑定到单片机的串口(针对只

有一个串口的单片机)。 将计算机的串口2 绑定到单片机的串口0 (针对有多个串口的单片

机,注意串标语的位置)。 需要注意的是,参量的括号是不克不及省略的,而outreg则是没

有括号的。 设置被绑定计算机串口的参量。基本使用方式为: 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, , 8, 1 设置串口2 。波特率为19 200,奇校验,8

位数值,1位遏制位。 使用以上两个命令,就可以将计算机的串口摹拟成单片机的串口了。

在进行软件仿真时,所有发送到被绑定的计算机串口上的数值都会转发到Keil摹拟的单片机

串口上,用户程序可以通过间断处理程序或查询方式接收到这些个数值;同样,单片机程序中

发送到单片机串口上的数值也会通过被绑定的计算机串口发发送来,可以被其它软件所接

收。哄骗这个特点,就可以利便地仿真、调试单片机的串口部分程序。要注意的是,这两个命

令需要一起使用。 首先,用串口线将计算机的两个串口毗连起来(或者是两台计算机上的两

个串口)。这两个串口一个用来摹拟单片机串口,另一个给调试程序使用。这个由用户自己分

配,没有特殊要求。 其次,编写好用户程序,并编译通过。 然后,设置工程文件(Project)

的相关参量,如图2 和图3所示。首要是选择软件仿真模式(Use Simulator)以及晶振参量。

图2 仿真参量设置 为了没必要每次进入仿真状态后,都需要输入串口参量设置命令,可以

建立一个初始化文件。初始化文件是一个普通的文本文件,内容就是仿真时需要的命令,根据

挨次一行输入一条。如图2所示,建立了一个debug. ini的初始化文件。如许,当每次进入仿

真调试状态时,Keil就会自动载入 debug. ini的内容进行初始化。 图3 晶振参量设置 为

了正确仿真串口,在软件仿真调试时,在用户的Keil工程文件的属性中,还需要设置实际使用

的晶振频率。这个参量非常重要,直接影响通信的波特率,可以根据实际使用的参量进行设

置。要注意,这个参量的单元是MHz。 设置好参量后,就可以进行仿真了。单击工具栏的

图标按此在新窗口浏览图片进入Debug(仿真调试)状态,在Output window窗口中的

command文本框(一般是在左下角)中输入上面先容的命令。例如,将PC机的串口1 设置

为单片机的串口: mode com19600, 0, 8, 1 assign com1 Sout 然后设置断点,一般

是在关键地方或与串口相关联的地方设置。再单击图运行(Run)用户程序,使用户程序运转

起来(不然是接收不到串口数值的)。这时再使用串口调试软件或用户调试软件,发送通信命

令或者数值包,看用户程序是否进入断点,以及相关的变量是否正确。还可以成心发送带有错

误数值的数值包,以观察用户程序的异常处理部分是否正常。一旦发现程序中的错误,可以顿

时遏制仿真调试,立即修改代码,然后再次反复上面的步调进行仿真。因为不需要与用户目标

板联机,也不用下载代码到用户板上,所以速度非常高。以上这些个步调和使用硬件仿真器的

基本一样,只不外现在使用的是软件仿真。 需要注意的是:仿真时单片机串口实际的波特率

由MODE命令来指定,单片机程序中的TMOD、SCON等参量是不影响串口仿真状态的(也

就是说这些个参量不影响仿真的波特率,即使它们是错误的)。但是间断的使能位(如ES、EA

等)还是起作用的,如果ES或EA被克制,那么就不会进入串口间断。 因为这种方法是哄骗

计算机的串口来仿真单片机的串口,而仿真是通过Keil软件来转换串口上的数值,不是直接

转发数值的, 所以在实际仿真时,处理速度会比实际单片机运行时稍微低一点。比方说仿真

状态时1 s只能发送/ 接收10个数值帧,但在单片机硬件上运行时可能1 s就可以接收/ 发

送50个数值帧。这与使用的计算机的速度有关,但对仿真来讲,是没有任何影响的。 对于多

串口的单片机,从理论上来讲,可以一次绑定多个串口,只要计算机有足够多的串口。基本上,

使用这种方法需要占用计算机的串口数目是单片机绑定串口的2倍。一个串口被Keil占用,

用来摹拟单片机的串口;别的一个串口被计算机占用,用来给单片机的串口收发数值。 这搭

先容的方法对C51和汇编语言都是适合的。它最大的利益就是简略、利便,容易使用,不需要

使用任何电路,也没有特殊的要求;甚至可以在硬件电路建造好之前就将串口部分的程序编

写、调试完结。作者使用这种方法已经很永劫间了,事实证明这种方法确实非常有效。其实

对于51单片机,Keil的仿真功能实在是太强大了,只要充分掌握其特点,能够熟练哄骗它,就

可以解决工作中的大多问题。很多工作都可使用软件仿真来完成,根本无需任何硬件仿真器;

只有一些新的外部部件的时序、接口的调试才有可能需要用到硬件仿真器。目前先容Keil

软件仿真这方面的参考册本很少,有些讲的还是老版本的用法,不外没有瓜葛,Keil的帮助文

件写得很详细、很清楚,只要认真看明白就会使用了。使用熟练后,就会发现Keil的功能相当

强。 对于串口编程,51单片机有Keil这个功能强大的研发软件,给咱们带来了极大的便当;

而在其它单片机软件的研发中,目前还没有这么强大的研发工具和利便的调试手眼。这搭有

个权宜的办法,就是可以先在Keil中编写并调试好串口程序,然后将程序移植到其它单片机

平台中(作者在PIC18单片机研发中就使用了这种方法,收到了很好的效验。当然这是指在

使用C语言研发单片机程序时,汇编语言是没有可移植性的)。至于怎样能够减小程序移植的

工作量,要得程序具备更好的通用性,以最小的价钱就可以平滑地移植到其它单片机平台上,

也是一个非常值当切磋的问题。别的,为了利便刚开始学者掌握这种方法,作者专门做了一个

例子程序,放在http: // shaoziyang. bloger. com. cn上,可以用来练习。