有关Keil软件仿真的51单片机串口调试技巧

发布者:Harmonious88最新更新时间:2016-09-14 来源: eefocus关键字:Keil  软件仿真  51单片机  串口调试 手机看文章 扫描二维码
随时随地手机看文章
引言

  在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。

  在单片机编程中,串口占了很重要的地位。传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。使用硬件仿真器的确是很有效的方法,但是也有一些缺点:

  很多仿真器不能做到完全硬件仿真,因而会造成仿真时正常,而实际运行时出现错误的情况;也有仿真不能通过,但是实际运行正常的情况。

  对于一些较新的芯片或者是表面贴装的芯片,要么没有合适的仿真器或仿真头;要么就是硬件仿真器非常昂贵,且不容易买到。

  有时由于设备内部结构空间的限制,仿真头不方便接入。

  有的仿真器属于简单的在线仿真型,仿真时有很多限制。例如速度不高,实时性或稳定性不好,对断点有限制等,造成仿真起来不太方便。

  1 调试前的准备工作

  下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。所需的只是:

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

  2 基本调试命令介绍

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

  2.1 ASSIGN命令

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

  ASSIGN channeloutreg

  其中: channel代表计算机的串口,可以是COM1、COM2、COM3或COM4;而inreg和outreg代表单片机的串口。对于只有一个串口的普通单片机,即SIN和SOUT;对于有两个或者多个串口的单片机,即SnIN和SnOUT(n=0,1,…即单片机的串口号)。

  有关Keil软件仿真的51单片机串口调试技巧 - eng_2005 - eng_2005的博客

 

图1 串口连线示意图

  例如:

  ASSIGN COM1SOUT
  将计算机的串口1绑定到单片机的串口(针对只有一个串口的单片机)。

  ASSIGN COM2S0OUT
  将计算机的串口2绑定到单片机的串口0(针对有多个串口的单片机,注意串口号的位置)。

  需要注意的是,参数的括号是不能省略的,而outreg则是没有括号的。

  2.2 MODE命令

  设置被绑定计算机串口的参数。基本使用方式为:

  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位停止位。

  使用以上两个命令,就能够将计算机的串口模拟成单片机的串口了。在进行软件仿真时,所有发送到被绑定的计算机串口上的数据都会转发到Keil模拟的单片机串口上,用户程序可以通过中断处理程序或查询方式接收到这些数据;同样,单片机程序中发送到单片机串口上的数据也会通过被绑定的计算机串口发送出来,可以被其他软件所接收。利用这个特点,就可以方便地仿真、调试单片机的串口部分程序。要注意的是,这两个命令需要一起使用。

  有关Keil软件仿真的51单片机串口调试技巧 - eng_2005 - eng_2005的博客

 

 

  2.3 仿真步骤

  首先,用串口线将计算机的两个串口连接起来(或者是两台计算机上的两个串口)。这两个串口一个用来模拟单片机串口,另一个给调试程序使用。这个由用户自己分配,没有特殊要求。

  其次,编写好用户程序,并编译通过。

  然后,设置工程文件(Project)的相关参数,如图2和图3所示。主要是选择软件仿真模式(Use Simulator)以及晶振参数。

  有关Keil软件仿真的51单片机串口调试技巧 - eng_2005 - eng_2005的博客
                              图2 仿真参数设置

  为了不必每次进入仿真状态后,都需要输入串口参数设置命令,可以建立一个初始化文件。初始化文件是一个普通的文本文件,内容就是仿真时需要的命令,按照顺序一行输入一条。如图2所示,建立了一个debug.ini的初始化文件。这样,当每次进入仿真调试状态时,Keil就会自动载入 debug.ini的内容进行初始化。

  为了正确仿真串口,在软件仿真调试时,在用户的Keil工程文件的属性中,还需要设置实际使用的晶振频率。这个参数非常重要,直接影响通信的波特率,可以按照实际使用的参数进行设置。要注意,这个参数的单位是MHz。

  设置好参数后,就可以进行仿真了。单击工具栏的图标按此在新窗口浏览图片进入Debug(仿真调试)状态,在Output window窗口中的command文本框(一般是在左下角)中输入上面介绍的命令。例如,将PC机的串口1设置为单片机的串口:

  mode com1 9600,0,8,1
  assign com1 Sout

  然后设置断点,一般是在关键地方或与串口相关联的地方设置。再单击图标运行(Run)用户程序,使用户程序运转起来(不然是接收不到串口数据的)。这时再使用串口调试软件或用户调试软件,发送通信命令或者数据包,看用户程序是否进入断点,以及相关的变量是否正确。还可以有意发送带有错误数据的数据包,以观察用户程序的异常处理部分是否正常。一旦发现程序中的错误,可以马上停止仿真调试,立即修改代码,然后再次重复上面的步骤进行仿真。因为不需要与用户目标板联机,也不用下载代码到用户板上,所以速度非常高。以上这些步骤和使用硬件仿真器的基本一样,只不过现在使用的是软件仿真。

  需要注意的是:仿真时单片机串口实际的波特率由MODE命令来指定,单片机程序中的TMOD、SCON等参数是不影响串口仿真状态的(也就是说这些参数不影响仿真的波特率,即使它们是错误的)。但是中断的使能位(如ES、EA等)还是起作用的,如果ES或EA被禁止,那么就不会进入串口中断。

  因为这种方法是利用计算机的串口来仿真单片机的串口,而仿真是通过Keil软件来转换串口上的数据,不是直接转发数据的,所以在实际仿真时,处理速度会比实际单片机运行时稍微低一点。比方说仿真状态时1 s只能发送/接收10个数据帧,但在单片机硬件上运行时可能1 s就可以接收/发送50个数据帧。这与使用的计算机的速度有关,但对仿真来说,是没有任何影响的。

  对于多串口的单片机,从理论上来说,可以一次绑定多个串口,只要计算机有足够多的串口。基本上,使用这种方法需要占用计算机的串口数量是单片机绑定串口的2倍。一个串口被Keil占用,用来模拟单片机的串口;另外一个串口被计算机占用,用来给单片机的串口收发数据。

  3 小结

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

  对于串口编程,51单片机有Keil这个功能强大的开发软件,给我们带来了极大的便利;而在其他单片机软件的开发中,目前还没有这么强大的开发工具和方便的调试手段。这里有个变通的办法,就是可以先在Keil中编写并调试好串口程序,然后将程序移植到其他单片机平台中(笔者在PIC18单片机开发中就使用了这种方法,收到了很好的效果。当然这是指在使用C语言开发单片机程序时,汇编语言是没有可移植性的)。至于如何能够减小程序移植的工作量,使得程序具有更好的通用性,以最小的代价就可以平滑地移植到其他单片机平台上,也是一个非常值得探讨的问题。

关键字:Keil  软件仿真  51单片机  串口调试 引用地址:有关Keil软件仿真的51单片机串口调试技巧

上一篇:单片机产生扫频信号400Hz~3KHz-----占空比50%的方波
下一篇:单片机延时精确计算

推荐阅读最新更新时间:2024-03-16 15:10

51单片机两种减法指令的用法介绍
1.带借位减法指令 SUBBA,Rn;(A)(A)-(Rn)-(C),以下类同。 SUBBA,direct SUBBA,@Ri SUBBA,#data 注意:减法之前先清零C,减法指令无不带借位减法指令。 2.减1指令 DECA;(A)(A)-1,以下类同。 DECRn DEC@Ri DECdirect 例、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H 执行:DEC@R0 DECR0 DEC@R0 结果为: (R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。
[单片机]
51单片机 HC05蓝牙模块学习
一、注意事项 1、烧写程序时,要把蓝牙tx,rx信号线拔掉,对烧写程序有影响。 2、执行HC05集命令时,均以rn结尾。串口中断若选择“发送新行”时,不用添加rn。原理相同。 二、准备软硬件 1、硬件:单片机STC89C52RC开发板,蓝牙模块HC05 2、软件:串口工具SSCOM3.3,手机蓝牙客户端 三、蓝牙模块HC05端口定义(6引脚) state——蓝牙连接状态,未连接输出低,连接后输出高 TX——信号发 RX——信号收 GND——地 +5V EN——使能端,需要进入AT模式时接3.3V,接单片机i/o引脚即可,高电平 四、进入AT模式进行参数和状态的设置 两种工作模
[单片机]
51单片机指令系统寻址方式
指令给出参与运算的数据方式称为寻址方式。换句话说,寻址方式就是寻找确定参与操作的数的真正地址。 在MCS-51系列单片机的指令系统中寻址方式共有7种, 立即寻址方式,mcs-51单片机的一种寻址方式,操作数就写在指令中,和操作码一起放在程序存贮器中。把“#”号放在立即数前面,以表示该寻址方式为立即寻址,如#20H,立即寻址方式通常用于对通用寄存器或内存单元赋初值。 直接寻址方式,指令操作数域给出的是参加运算的操作数地址。在MCS-51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据寄存器和位地址空间。其中,特殊功能寄存器和位地址空间只能用直接寻址方式访问。 寄存器寻址方式,操作数在寄存器中,由指令操作码中的rrr
[单片机]
keilC支持的51单片机调试方法
需要一种能够调试51内核(VHDL源码可见)的方法,上位机为KEIL程序。找来找去,在keil的help目录下,有相关的具体的调试方法。小结一下: ULINK2:调试ARM的JTAG-USB方法,需要JTAG-USB转换器,不适用51单片机。 MONADI:通过串口调试硬件。支持ADI的硬件。 MON390:针对Dallas 390/400/5240的 调试方法。 flashmod51:通过串口下载、调试程序,同时可以通过串口烧写FLASH,可以再ROM冲任意插入硬件调试断点。 需求: 1 8051兼容 2 需要4-5K的代码空间 3 256 xdata内存 4 片上或者片外的串口 5 6个字节的堆栈空间 6 F
[单片机]
Keil C51对C语言的关键词扩展之八: far
far的出现,是Keil 编译器为了支持新出现的8051家族增强型MCU,这些增强型MCU可能拥有大于64KB的存储器。使用far可访问扩展的RAM,使用const far可访问扩展的ROM。 NXP 51MX架构51单片机提供通过通用指针访问多达8MB的code和xdata存储空间。Dallas 390架构的51单片机通过24位的DPTR寄存器结合传统MOVX 、MOVC指令来访问扩展的RAM和ROM。
[单片机]
51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》、《DS18B20 单总线数字温度计》 DS18B20介绍 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接 口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、 适用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20 温度传感器具有如下特点: 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据 线供电。
[单片机]
【<font color='red'>51单片机</font>快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取
51单片机实验(一)定时/计数器及其中断
我们这学期开了单片机的课,不知道为什么我们要用汇编语言写程序,感觉汇编程序真的挺难写的,所以把实验记录下来把。 如果没有学过汇编的小伙伴建议先去熟悉一下简单的汇编指令,之前简单的实验我就不记录了,我们从定时计数器实验开始吧。 首先来回顾一下和中断,定时有关的知识 51单片机中断级别 中断源 中断允许寄存器IE EA---全局中允许位。 EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。 EA=0,关闭全部中断。 -------,无效位。 ET2---定时器/计数器2中断允许位。 EA总中断开关,置1为开; ET2=1,打开T2中断。 EX0为外部中断0(INT0)开关,…… ET
[单片机]
<font color='red'>51单片机</font>实验(一)定时/计数器及其中断
51单片机ADC0804模数转换学习
数模转换器ADC0804与单片机连接的原理图: 这TX-1C实验板上的ADC0804和单片机连接的电路原理图。 左边的是ADC0804,右边的是74HC573锁存器,锁存器同时又连接了单片机没画出。ADC0804的引脚CSAD是片选引脚,因为是低电平有效所以当 送0时,我们就可以选中它工作了。RD也是低电平有效,是读信号的,WR也是低电平有效,当送0时就可以启动A/D开始转换了。INTR是转换结 束引脚,同样也是低电平有效,当INTR为0时,表示转换结束了。DB0-DB7是转换后的数字信号输出端口。AGND和DGND是接地的。CLK R和 CLK IN(即19和4引脚)是用来给ADC0804产生内部时钟脉冲的
[单片机]
<font color='red'>51单片机</font>ADC0804模数转换学习
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved