如何提高keil串口的调试效率

发布者:SereneWanderer最新更新时间:2016-07-19 来源: eefocus关键字:keil  串口  调试效率 手机看文章 扫描二维码
随时随地手机看文章
最近做的项目要用到单片机的串口的地方较多,所以在苦苦思考如何有效的提高串口调试的效率,说实话要是有一个有效的调试方案的话,会大大的缩短开发的时间的哦,在网上搜了一把,发现有点意思哦:

运行keil Debug 在命令行加下两句:
MODE COM1 9600,0,8,1   //根据实际情况设置波特率
ASSIGN COM1 SOUT      //..........
然后打开一个串口调试软件,对应串口COM1,9600,0.就可以看到结果了

mode com1 9600,0,8,1 //无校验位,8位数据位,1个停止位
assign com1 sout//意思就是uVision 把模拟的单片机串口对应到Serial window
和#1上(在serial window里输入字符,就是模拟对单片机串口输入数据)
mode com1 9600
assign com1sout

因为用的本本没有串口,也没法去试试,有空找个台式的试一把哦!o(∩_∩)o...!

 1  调试前的准备工作

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

  ①  硬件。1台普通计算机(需要带有2个标准串口)和1根串口线(两头都是母头,连线时RXD、TXD要相互交叉)。

  ②  串口软件可以是自己编写的专用调试或上下位机通信软件,也可以是通用的串口软件(如串口助手、串口调试等)。

  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,…即单片机的串口号)。

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

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

2.3  仿真步骤

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

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

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

仿真参数设置

图2  仿真参数设置

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

晶振参数设置

图3  晶振参数设置

  为了正确仿真串口,在软件仿真调试时,在用户的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的功能相当强。

关键字:keil  串口  调试效率 引用地址:如何提高keil串口的调试效率

上一篇:单片机的宗述
下一篇:keil 中如何调用其他文件的函数

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

S3C2440 UART/串口(一)
串口: 作用:【1:打印调试信息 2:外接GPS,蓝牙等各种模块】 1:TTL/CMOS逻辑电平下5v对应逻辑‘1’,0v对应逻辑‘0’。在空闲时TX RX 保持高电平。 2:RS--232逻辑电平,通常情况下ARM芯片串口输出为TTL电平,需要通过电平转换芯片才能够将TTL电平转换成232电平。 串口发送需要满足一下几点: 发送,接收双方约定好1:波特率: 2:双方约定好数据格式【数据位,停止位,校验位,流控】 串口如何发送1Byte数据比如:‘A’ 'A' 0X41 ,01000001 1:双方约定好波特率【比如都是 115200】 2:数据格式保持统一 3:原来数
[单片机]
S3C2440 UART/<font color='red'>串口</font>(一)
S3C2440A串口驱动-WINCE6.0下通过串口和外设进行数据通信(一)
一,开发环境 WINCE6.0下编写串口驱动,使用S3C2440A的UART0和PC进行通信,UART1、UART2和AVR Atemga162单片机进行通信。 二,串口流驱动流程 主要完成 XXX_Init,XXX_Open,XXX_Read,XXX_Write,XXX_Seek,XXX_PowerUp,XXX_PowerDown,XXX_Close,XXX_Deinit,XXX_IOControl函数。下面介绍自己在驱动中用到的函数。 1,XXX_Init() 在XXX_Init()函数中完成驱动中相关变量和资源等的初始化工作。如S3C2440A相关寄存器的初始化,为其分配地址空间。例如串口0控制寄存器的初始化
[单片机]
STM32串口收数据的几种不同方式
本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机,具体下面详谈。。。 实例一: void USART1_IRQHandler(u8 GetData) { u8 BackData; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志. GetData = UART1_GetByte(BackData); //也行GetData=USART1- DR; USART1_SendByte(GetData); //
[单片机]
串口服务器RS232和485转以太网模块的选购技巧
  很多串口服务器厂家都解决不了的难题:   当把串口服务器设置为TCP client时,与服务器建立了TCP连接后,一旦网络非法断开或者服务器非正常关机,串口服务器就一直认为TCP连接还在建立中,就一直不再去请求连接,这时服务器再也不能和串口服务器通信了。   当把串口服务器设置为TCP  server时,串口服务器接受了连接请求后建立了TCP连接,一旦网络非法断开或者服务器非正常关机,串口服务器就一直认为TCP连接还在建立中,就一直不释放之前的连接,就不能接受新的连接。   因为网线断开、网络中的交换机断电或者电脑服务器非正常关机等这网络非法断开经常出现,一般的用户可能认为串口服务器死机了,其实不是的(只要能搜索到或者
[嵌入式]
双异步串口经AT89C2051与TMS320VC5402HPI口通信的解决方案
    摘要: 提出了两个微机串口与DSP处理器(TMS320VC5402)HPI(Host Port Interface)口通信问题的解决方案,该方案采用单片机(AT89C2051)实现数据的串/并、并/串转换,并控制DSP的HPI实现共享总线。给出了硬件连接电路和用FPGA作为总线仲裁器的设计思路,介绍HPI口的操作过程,单片机与微机串口之间通信的硬件设计方法。     关键词: DSP 单片机 HPI 串行通信 FPGA 本文所介绍的是我所正在研制的卫星CDMA接收机未端DSP与微机串口通信的接口电路。由于CDMA接收机支持两个独立CDMA信道的接收,并将两路解调后的数据分别经串口送至不同的计算机
[工业控制]
老查的ARM学习笔记:chapter-3(串口驱动程序分析 )
tty子系统架构概念简述 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 1 串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看作是一个字符设备。这些串行端口所对应的设备名称是/dev/ttySAC0; /dev/ttySAC1…… 2 控制台终端(/dev/console) 在Linux系统中,计算机的输出设备通常被称为控制台终端(Console),这里特指printk信息输出到的设备。/dev/console是一个虚拟的设备,它需要映射到真正的tty上,比如通过内核启动参数” console=ttySAC0”就把co
[单片机]
老查的ARM学习笔记:chapter-3(<font color='red'>串口</font>驱动程序分析 )
51单片机 串口发送数据(只是发送)
51单片机 串口发送数据(只是发送)用于调试。 #include reg51.h #define uchar unsigned char #define uint unsigned int #define XTAL 11059200 // CUP 晶振频率 #define baudrate 9600 // 通信波特率 /************************************************* 函数:uart_init 功能:初始化串口 出口:void 入口:void *************************************************/ void uart
[单片机]
SP2328串口扩展专用芯片及其与单片机的接口电路
摘 要: 本文介绍一种新型的单片机串口扩展芯片的功能特性以及与单片机接口的应用。 关键词: 单片机; 多串口通信 在设计由多个单片机组成的数据采集电路时,一般要用多个串口在各个单片机之间进行数据通信。为了解决单片机扩展多个串口的问题,以前大多采用多片AT89C2051来实现多串口通信。每个AT89C2051用并口与上位机连接,再通过AT89C2051的串口与下位机串口连接。这种电路设计,单片机编程比较复杂,整个电路的调试也比较麻烦,可靠性不是很高。一种新开发的SP2328串口扩展芯片很好的解决了上述问题。 SP2328是成都视普科技公司的串行口扩展专用芯片,能将普通单片机(如:AT89C2051、AT89C51等)的
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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