Keil串口调试技巧

合集下载

使用Keil软件模拟调试单片机串行口

使用Keil软件模拟调试单片机串行口

使用Keil软件模拟调试单片机串行口单片机串行口是单片机中很常见的接口之一,常用于与外界通讯,如与PC机通讯,接收或发送数据等。

Keil软件可以帮助我们模拟及调试单片机串行口,下面是详细介绍。

一、Keil软件简介Keil是一款强大的单片机编程软件,具有模拟器和仿真器。

其可支持多种嵌入式系统和多种编译器。

同时Keil具有标准C 编译器,专门用于单片机编程,而且具有与某些模拟器和编译器的集成,可提供完整的嵌入式开发环境。

二、使用Keil软件模拟1. 连接软件与硬件在开始模拟之前,需要将单片机与电脑通过串口连接好。

打开“Options for Target”对话框,选择“Debug”选项卡,选择正确的COM 端口,设置存根速度,完成调试设置。

2. 添加串行口文件在Keil软件中打开设计文件,键入“#include <reg52.h>”来添加注册头文件,其中包含了需要使用串口的相关寄存器位。

利用如下代码,可以对串行口的各项参数进行设置,例如波特率、校验位等等。

void init(){SCON = 0X50; //使串口工作在方式1,即8位数据,可变波特率TMOD |= 0X20; //TMOD的高4位设为0010,使Timer1工作在方式2TH1 = 0XF3; //波特率设为2400bpsTL1 = 0XF3;TR1 = 1; //启动Timer1ES = 1; //开启串口中断EA = 1; //打开总中断}3. 编写数据收发代码在调用串口的过程中,我们往往需要使用到接收和发送两个函数。

在接收方面,我们需要设置好接收中断模式以及缓冲区的异步处理。

编写简单的数据接收收发代码如下:void send_data(unsigned char dat){SBUF = sdat; //将数据传输到SBUF当中while(!TI); //等待发送完成TI = 0; //完成发送}unsigned char receive_data(){while(!RI); //等待接收完成RI = 0; // 完成接收return SBUF; // 返回接收缓冲区}4. 最后进行模拟完成串行口配置和数据处理之后,就可以开始模拟调试了。

keil调试程序方法

keil调试程序方法

keil调试程序方法
一、Keil调试程序方法
1、打开Keil,新建工程,在工程目录下,右键选择“添加新建文件”,然后选择“源文件”。

这时会弹出“新建文件对话框”,在文件类型中选择“C文件”。

2、编写C代码,调试程序,为了方便调试,先在程序里加上调试的操作,如“printf”,“getchar”等。

3、如果添加多个C文件时,也可以选择“添加新建文件”,然后选择“工程文件”,在弹出的对话框里输入文件名,然后点击“确定”。

4、编译源代码,编译完成后,查看是否有编译错误,如果没有编译错误,就可以继续下一步。

5、点击编译器的“调试”按钮,它会自动加载要调试的程序,然后就可以进行调试了。

6、在Keil的调试界面上,可以使用鼠标画“断点”,程序运行时,就能自动地停在“断点”处。

7、当一段程序运行完成,可以按F11快捷键,让程序自动运行,或者按“运行”按钮,让程序在断点处暂停,然后再单步执行一行一行调试。

8、Keil调试界面可以编辑程序,也可以查看程序的运行结果,从而可以及时发现程序中的bug。

9、在Keil的调试界面上,可以编辑程序,也可以给变量赋值,从而方便快速地调试程序。

10、当完成调试后,可以按“重新编译”按钮,重新编译整个程序,再查看编译结果,最后保存这个工程,保存文件名为*.uv2文件。

Keil软件串口调试实用技巧

Keil软件串口调试实用技巧

Keil软件的串口调试技巧[ 来源:| 更新日期:2007-6-4 22:47:08 | 评论0 条| 我要投稿]引言在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。

通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。

RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。

在单片机编程中,串口占了很重要的地位。

传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。

在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。

使用硬件仿真器的确是很有效的方法,但是也有一些缺点:◆很多仿真器不能做到完全硬件仿真,因而会造成仿真时正常,而实际运行时出现错误的情况;也有仿真不能通过,但是实际运行正常的情况。

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

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

◆有的仿真器属于简单的在线仿真型,仿真时有很多限制。

例如速度不高,实时性或稳定性不好,对断点有限制等,造成仿真起来不太方便。

1 调试前的准备工作下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。

使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。

所需的只是:①硬件。

1台普通计算机(需要带有2个标准串口)和1根串口线(两头都是母头,连线关系如图1所示)。

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

如果没有合适的串口调试软件,则可使用笔者编写的一个免费的串口小工具TurboCom。

keil printf 调用的串口

keil printf 调用的串口

keil printf 调用的串口
Keil printf调用的串口
Keil是一款很受欢迎的嵌入式开发工具,其中有一个很重要的功能就是能够通过外部串口通信来调试程序。

本文就介绍如何使用Keil printf函数来调用串口来实现调试功能。

1、首先,要在Keil中使用printf函数,必须安装两个文件:stdio.h 和 stdarg.h,它们可以在Keil的库中找到,需要注意的是,stdio.h中的文件要放在stdarg.h的下面。

2、编辑printf函数,在Keil新建一个文件,并将其命名为printf.c,并将其完成并编译,编译完成后可以正确的运行printf 函数:
/* 重定义printf函数 */
int fputc (int ch, FILE *f)
{
SendData(ch); // SendData为串口发送函数,由用户自定义
return ch;
}
/* 重定义getchar函数 */
int fgetc (FILE *f)
{
return 0;
}
3、在Keil的Project Workspace中的“Target”节点的“Output”中,勾上“use MicroLIB”,完成以上步骤后,就可以在程序中使用printf函数来调用外部串口了。

以上就是Keil中如何使用printf函数来调用外部串口的方法,Keil的printf函数可以使得调试程序非常方便,包括调试变量和输出信息等,您可以根据自己的实际情况进行适当的调整,而不必过多的花费时间,达到更快的调试效果。

keil调试经验

keil调试经验

KEIL调试高级技巧在调试状态,Debug 菜单项中的命令可以使用了,有关编译的工具栏按钮消失了,出现了一个用于运行和调试的工具栏,Debug 菜单上的大部份命令都有相应的快捷按钮。

从左到右依次是复位、运行、暂停、单步跟踪、单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮命令;然后按一下图示第二个“运行”按钮。

连接上相关的实验资源,本实验用一条8PIN的数据排线把实验仪的CPU部份的P1口(JP44)连接到八路指示灯部份的JP32。

这时你会看到实验仪的八个红色LED,轮流点亮,表示运行成功,也可以查看相关的变量和参数,非常方便。

⒈单步跟踪运行使用菜单Debug->Step 或上图第四个单步运行按钮或使用快捷键 F11 可以单步跟踪执行程序,在这里我们按下 F11 键,即可执行该箭头所指程序行,每按一次 F11,可以看到源程序窗口的左边黄色调试箭头指向下一行,如果程序中有Delay延时子程序,则会进入延时程序中运行。

⒉单步运行如果Delay 程序有错误,可以通过单步跟踪执行来查找错误,但是如果 Delay 程序已正确,每次进行程序调试都要反复执行这些程序行,会使得调试效率很低,为此,可以在调试时使用 F10 来替代 F11(也可使用菜单 Step Over 或相应的命令按钮),在 main 函数中执行到 Delay时将该行作为一条语句快速执行完毕。

为了更好的进行对比,我们重新进入仿真环境,将反汇编窗口关闭,不断按F10 键,可以看到在源程序窗口中的左边黄色调试箭头不会进入到延时子程序。

⒊全速运行点击工具栏上的“运行”按钮或按F5 键启动全速运行,全速执行程序,此时用户板上的 P1 口所接 LED 以流水灯状态显示。

⒋暂停点击工具栏上的按钮,此时用户板上的P1 口所接 LED 停止以流水灯状态显示,只有一个 LED 灯点亮(取决于暂停前的 P1 的值)。

keil ARM与虚拟串口联调设置及解决办法

keil ARM与虚拟串口联调设置及解决办法

Keil ARM 与虚拟串口联调设置第一步:创建虚拟串口使用工具:Configure Virtual Serial Port Driver记住自己创建的两个虚拟串口第二步:创建debug.ini 命令执行文件Mode COM2 9600,0,8,1assign com2 <S2IN> S2OUT注意:1:串口选择与虚拟串口相同2:串口工作波特率,校验方式,数据长度,停止位assign com2 <输入寄存器> 输出寄存器串口工作方式对应9600,0,8,19600,1,8,19600,2,8,1第三步:环境设置第四步:全部编译进入调试:开启仿真,打开串口调试助手。

虚拟串口驱动显示工作方式其他:命令行也可以直接写命令在命令栏中,操作如下:点击进入仿真模式,在命令行将debug.ini命令输入错误解决办法:*** error 30, line 2: undefined name of virtual register问题描述:虚拟寄存器没有定义问题原因:命令assign com2 <S2IN> S2OUT中<S2IN> S2OUT是没有定义的。

可以通过dir vtreg命令查看可以寄存器对将对应串口寄存器写入对应命令中*** error 65: access violation at 0x40021000 : no 'read' permission驱动没有调用正确*** error 127, line 2: Com channel not opened, use MODE command first 命令:Mode COM4 9600,0,8,1assign com4 <S2IN> S2OUT中的串口选择错误,要确保与虚拟串口一致。

实验1使用Keil输入和调试程序

实验1使用Keil输入和调试程序

实验一使用Keil输入和调试程序(一)实验目的:通过实验掌握Keil C51集成开发环境输入程序和调试程序的方法。

(二)实验仪器:计算机一台STC12学习板一套STC单片机仿真器一套USB连接电缆一根(三)实验内容及步骤:Keil C51 IDE又叫Keil集成开发环境或Keil C51μVision3。

实验要求使用Keil集成开发环境完成实验程序的输入、调试。

Keil是以工程项目的方法管理文件。

所有的文件(源程序文件、头文件和各种技术文档)都是放在工程项目里的统一管理。

下面通过一个实验程序学习使用Keil IDE建立应用程序和调试程序的步骤:✓新建一个工程项目。

✓为工程项目选择目标器件。

✓建立源程序文件,输入程序代码并保存。

将源程序文件添加到工程项目里。

✓为工程项目设置软件、硬件的调试环境。

✓输入、调试和运行实验程序。

要创建的工程项目是:设计一个程序,使学习板上的LED1灯闪亮,电路图如图2-1所示(在第14页)。

该实验工程项目的建立过程如下:1、启动Keil C51的IDE开发环境并建立一个工程项目双击计算机桌面上的Keil C51 IDE图标即可启动Keil C51 IDE开发环境。

如果以前已经建立了工程项目,Keil51 IDE启动后会直接显示原来打开的工程项目。

也可以打开原来已经存在的工程项目。

打开已经存在的项目方法是,从“Project”菜单中选择“Open Project”菜单项,从弹出的对话框中选择要打开的项目。

新建项目文件时,从“Project”菜单中选择“New Project”菜单项,将打开“Create New Project”对话框。

如图1-1所示。

在“Create New Project”对话框中做以下的工作:✧为工程项目选择一个存放路径,在此选择STC51文件夹(若计算机中没有STC51文件夹,则需要建立它)。

✧在文件名输入框里输入,这是为实验工程项目取的工程项目文件名(扩展名是.uv2)。

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧在嵌入式系统开发中,串口调试是一项非常重要的技术。

Keil软件是一个广泛应用于嵌入式系统开发的软件平台,通过其内置的串口调试助手,我们可以方便地进行仿真的串口调试。

本文将介绍如何使用串口调试助手Keil软件仿真的串口调试技巧。

1. 了解串口基础知识在开始使用串口调试助手之前,首先需要了解一些串口的基础知识。

串口通信是一种通过串行传输数据的通信方式,常用的串口通信标准有RS232、RS485等。

了解波特率、数据位、停止位、校验位等串口通信参数的含义和选择是必要的。

2. 配置串口参数打开Keil软件后,选择对应的工程文件,并进入工程配置页面。

在这里,我们可以找到串口调试助手的配置选项。

根据实际需求,设置串口通信的参数,如波特率、数据位、停止位、校验位等。

确保与目标设备的串口参数一致,才能正常进行串口通信。

3. 编写串口发送与接收代码在代码中,我们需要编写串口发送和接收的相关代码。

通过Keil软件提供的API函数,我们可以方便地实现数据的发送和接收。

在发送数据时,需要将数据写入到相应的寄存器,以便传输到串口。

而在接收数据时,需要从寄存器中读取数据。

通过合理设计代码,可以实现稳定可靠的串口通信。

4. 仿真运行程序完成代码编写后,我们可以进行仿真运行,以验证串口调试功能的正确性。

在Keil软件中,可以选择进行单步调试、断点调试或连续运行调试。

通过监视寄存器的值变化、观察串口发送与接收的数据情况,可以帮助我们进行串口调试。

5. 使用串口调试助手测试在完成仿真运行后,我们可以使用串口调试助手进行测试。

打开串口调试助手,并选择与目标设备串口参数一致的配置。

点击打开串口,即可开始接收串口发送的数据。

通过观察串口调试助手输出的数据,可以验证串口通信的正确性。

6. 调试技巧与注意事项在使用串口调试助手Keil软件进行串口调试时,还需要注意一些调试技巧与注意事项。

首先,确保串口连接正确可靠,避免松动或接触不良导致数据传输错误。

KEIL中用虚拟串口调试串口程序

KEIL中用虚拟串口调试串口程序

虚拟出两个串口,并且已经连接在一起Stime=0x00 回车这些调试命令如何使用,比较好找,但是,这三条一条都不能少。

开始时,缺少最后一条命令,就无法运行。

Mode用于设置端口Assign用于分配端口输入输出Stime用于设置是否需要考虑内部计数频率。

0时表示直接以mode设置为准,此时不必计算内部的计数而产生的波特率;1时则考虑内部产生的频率而发生的波特率,更合适实际模拟调试,能够检验定时器设置是否准确。

3、现在可以开始运行你的项目了;4、打开串口调试工具,注意设置,端口号要设置为一对串口中的另外一个,本例中为COM3,另外,要确保发送数据的格式,需是16进制。

设置为波特率9600,无校验位、8位数据位,1位停止位(和COM2、程序里的设置一样)。

可以通过KEIL发送数据,在串口调试助手中就可以显示出来。

也可以通过串口调试助手发送数据,在KEIL中接收。

示例程序:#include "stc15.h" //包含单片机寄存器定义文件unsigned char xdata rxbuffer[21]={0}; //在外部RAM区定义20个单元unsigned char num; //计数变量unsigned char checksum; //校验和变量void main (void) //主程序{num=0;checksum=0;SCON=0x50; //置串行口工作方式1(SM0=0,SM1=1),允许接收(REN=1)AUXR=0x0; //选择定时器1作为波特率发生器// TMOD=0x0; //定时器1为工作方式0// TH1=0xff; //产生9600bps的时间常数// TL1=0xe8;// 注意,该虚拟串口方式无法使用STC定时器工作方式0的波特率发生器模式,只能使用传统的8051模式TMOD=0x20; //定时器1为工作方式1TH1=0xfd; //产生9600bps的时间常数TL1=0xfd;TR1=1; //启动定时器1ES=1; //串行口开中断EA=1; //开中断while(1); //等待中断}void UART_ISR(void) interrupt 4 //中断号4是串行口1中断{unsigned char rxchecksum=0;if(RI){RI=0;rxbuffer[num]=SBUF;if(num<21){if(num<20)checksum^=rxbuffer[num]; //计算校验和num++; //修改计数变量值}if(num==21) //应答信号不是0,重新发送{rxchecksum=rxbuffer[num-1]; //设置发送数据缓冲区指针if (rxchecksum==checksum){SBUF=0x00; //发送第一个数据}else{SBUF=0xff; //发送第一个数据}num=0; //为下次接收做准备checksum=0;}}else{TI = 0; //清发送中断标志}}。

Keil仿真的串口仿真的调试技巧

Keil仿真的串口仿真的调试技巧

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

通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。

RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。

在单片机编程中,串口占了很重要的地位。

传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。

在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。

使用硬件仿真器的确是很有效的方法,但是也有一些缺点:◆很多仿真器不能做到完全硬件仿真,因而会造成仿真时正常,而实际运行时出现错误的情况;也有仿真不能通过,但是实际运行正常的情况。

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

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

◆有的仿真器属于简单的在线仿真型,仿真时有很多限制。

例如速度不高,实时性或稳定性不好,对断点有限制等,造成仿真起来不太方便。

1 调试前的准备工作下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。

使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。

所需的只是:①硬件。

1台普通计算机(需要带有2个标准串口)和1根串口线(两头都是母头,连线关系如图1所示)。

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

如果没有合适的串口调试软件,则可使用笔者编写的一个免费的串口小工具TurboCom。

除了与其他软件一样的数据收发功能外,它还有定时轮流发送自定义数据帧和自动应答(接收到指定数据帧后,自动返回相应的数据帧)这两个很有用的功能,特别适合于老化测试。

keil软件实例教程2(keil的调试命令、在线汇编和断点设置)

keil软件实例教程2(keil的调试命令、在线汇编和断点设置)

Keil 的调试命令、在线汇编与断点设置上一讲中我们学习了如何建立工程、汇编、连接工程,并获得目标代码,但是做到这一步仅仅代表你的源程序没有语法错误,至于源程序中存在着的其它错误,必须通过调试才能发现并解决,事实上,除了极简单的程序以外,绝大部份的程序都要通过反复调试才能得到正确的结果,因此,调试是软件开发中重要的一个环节,这一讲将介绍常用的调试命令、利用在线汇编、各种设置断点进行程序调试的方法,并通过实例介绍这些方法的使用。

一、常用调试命令在对工程成功地进行汇编、连接以后,按Ctrl+F5或者使用菜单Debug->Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功能强大,可以在没有硬件和仿真机的情况下进行程序的调试,下面将要学的就是该模拟调试功能。

不过在学习之前必须明确,模拟毕竟只是模拟,与真实的硬件执行程序肯定还是有区别的,其中最明显的就是时序,软件模拟是不可能和真实的硬件具有相同的时序的,具体的表现就是程序执行的速度和各人使用的计算机有关,计算机性能越好,运行速度越快。

进入调试状态后,界面与编缉状态相比有明显的变化,Debug 菜单项中原来不能用的命令现在已可以使用了,工具栏会多出一个用于运行和调试的工具条,如图1所示,Debug 菜单上的大部份命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。

学习程序调试,必须明确两个重要的概念,即单步执行与全速运行。

全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。

Keil实用功能概要与串口动态调试

Keil实用功能概要与串口动态调试

固定数值或字符串。二进制(Y、y 后缀) 、十进制、十六进制(0x、0X 前缀或 h、H 后 缀) 、八进制(0 前缀,Q、q、O、o 后缀) 系统变量改变或影响 μVision 运行。 特殊函数寄存器 SFRs 和虚拟仿真寄存器(VTREGs) 程序变量是编程变量。常被称为符号或象征名。代码行号、数值变量、函数等。 可执行程序的参考地址。 位地址表示可位寻址数据内存。 类型设定让你规定一个表达式或子表示式的数据类型。 +、-和/。可以被用于结合子表达式为一个单一表达式。 存贮类型规定符可被用于 80x51 微处理器调试命令中。
断点例子:
Expression: \Measure\125 当目标程序到达模块 MEASURE 中代码 125 行时, 执行断点中断程序。 当目标程序到达 main 函数时,执行断点中断程 序。 当 目 标 程 序 第 10 次 到 达 函 数 save_current_measurements 时, 执行断点暂停程 序执行。 当目标程序到达 tc0 函数时,执行断点 Execution Break(E)在输出窗口命令页 Output Window – Command 打印 T0 Interrupt Occurred。 当表达式 sendchar == 96 变为 TRUE,条件断点 Conditional Break (C)暂停程序执行。在上述断点 对话框中这个断点被禁止。 当对 save_record[10]读写发生和两个目标之后, 访问断点(A)暂停程序执行。因为 save_record 是一个大小 16 字节的结构,这个断点定义了一 个 48 字节的访问区域。 当值 10 写入变量 sindex 后,访问断点暂停程序 执行。 当目标程序到达函数 measure_display 时,执行 断点执行 μVision 调试函数 MyStatus。当调试函 数 MyStatus 被执行后,目标程序执行恢复执行。 当目标程序到达模块 main.cpp 的 268 代码行, 执行断点 (E) 暂停。 模块具有相对路径../../source, 并属于应用程序 cpp_template。

用KEIL实现联机调试的步骤

用KEIL实现联机调试的步骤

用KEIL实现联机调试的步骤keil 除了可以编写、编译和仿真执行来调试用户程序外,还可以通过串口实现联机调试,即通过单步、断点看代码在硬件上的执行效果。

步骤如下:使用的是AT89C51CC03 单片机,keil 版本是Keil C51 V9.00。

1、用KEIL 建立工程项目文件,编程、编译调试用户程序,保证软件执行进行没什么问题。

2、修改KEIL 安装点keil/c51/FlashMon 目录下与单片机型号一致的配置文件config.inc,主要是根据实际情况修改cpu_clock 和code_start 两个参数值,我改为12M 和0E000H。

3、重新编译该目录下的程序,生成新的调试程序Monitor.HEX,如果没有重新生成,把选项create HEX file 勾上。

4、运行FLIP 程序,将Monitor.HEX 烧进单片机中,起始地址为0E000H,即SBV=E0、BLJB 选上、BSB=0、EB=FF5、点击Start Application 按钮执行Monitor.HEX 程序6、运行keil,打开工程项目文件,修改调试参数,即菜单project-->optionfor target,选debug 页,点击右边的use keil monitor 51 driver,点击seting 按钮,选择串口和波特率,注意,要和烧片子时用的波特率一致,一般用9600。

需要注意的是,如果串口为自动方式(即除了三根通信线外,还接了RTS 和DTR),需要将RTS 和DTR 设置为inactive.7、编译好程序,点击debug 菜单下的调试命令,可以单步执行,可以设置断点,可以全速运行,这时候实际使用单片机硬件运行程序,可以看到执行效果,如显示、按键响应等。

这种情况下可以调试程序实际执行的效果。

8、如果不设置断点,全速运行用户程序,则用户程序和实际运行一致,keil。

Keil C环境下串口实验的模拟调试

Keil C环境下串口实验的模拟调试
c mmu ia i n b t e CM n r r p s d u d rKe1C5 o t r n io me t Th i lto x o n c t e we n S o a d PC a e p o o e n e i s fwa e e vr n n . 1 e smu a i n e — p r e ti s f l ws e il r g a s n s t e a e i ld t e i n sa o l m o :S ra o r m e d wo h x d cma a a,c a g si f rd cma n ip a so o r p h n e t o e i la d d s l y n f u
dgtltb s ii u e .Co aig t esmuaind t n e ot r tpe eu ino / mo t t h cu l eil a mp rn h i lto aau d rs fwa ese x c t fIO uh wi t eat a ra o h s
i t ra e c mmu ia in r s ls , h y a e c n itn . Th s e p r n S t k h t d n s mo e f mi a n efc o n c to e u t t e r o ss e t i x ei me ti o ma e t e s u e t r a l r i wi i g e c i ir c mp t rs fwa e d v l p n n i n n n e u g n e al . An t a s k s t sn l- h p m c o o u e o t r e e o me t e v r me ta d d b g ig d t i h o s d i lo ma e s u e t e p u d r t n i g t es r 1i t ra e c mmu ia i n a d d n mi ip a . t d n sd e n e s a d n h e i n e f c o a nc t n y a c d s l y o

如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧

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

凡是使用单片机串口通过RS232/ RS485电平转换芯片与上位机毗连,以进行上位机与下位机的数值互换、参量设置、构成收集以及各种外部设备的毗连等。

RS232/ RS485串行接口总线具备成本低、简略可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数值量不是很大的场所,串口通信仍然是很好的选择,有着广阔的使用远景。

在单片机编程中,串口占了很重要的地位。

传统方式串口程序的调试,往往是哄骗专用的单片机硬件仿真器。

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

使用硬件仿真器的确是很有效的方法,但是也有一些缺点:很多仿真器不克不及做到完全硬件仿真,因而会造成仿真时正常,而实际运行时呈现错误的环境;也有仿真不克不及通过,但是实际运行正常的环境。

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

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

有的仿真器属于简略的在线仿真型,仿真时有很多限制。

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

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

使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。

所需的只是:①硬件。

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

②串口软件可所以自己编写的专用调试或上下位机通信软件,也可所以通用的串口软件( 如串口助手、串口调试等) ,首要用来收发数值。

如果没有合适的串口调试软件,则可使用作者编写的一个免费的串口小工具TurboCom。

除了与其它软件一样的数值收发功能外,它还有定时轮流发送自界说数值帧和自动应答(接收到指定命据帧后,自动返回相应的数值帧)这两个很有用的功能,特别适合于老化测试。

使用keiL中的printf和scanf进行串口的调试

使用keiL中的printf和scanf进行串口的调试

使用keiL中的printf和scanf进行串口的调试1、printf( )和scanf(在包含在stdio.h中库函数printf( )的发送原理:首先在初始化时要把TI置1,如果不这样做,你的程序是会一直在JNB TI,$这条指令上跑,:printf( ) 库函数发送流程图2、使用C51输入输出函数都是通过串行口工作的,因此,要使用这类函数必须对单片机的串行口进行设置和初始化,如串口模式的选择和波特率的设定等等。

在需要使用printf函数时需要对串口进行初始化:SCON= 0x52; /*0101,0010:方式1,REN=1允许接收,8-bit UART,TI= 1;RI=0 */ PCON=0; /*SMOD=0*/TMOD |= 0x20; /*TMOD:定时器T1,工作模式2, 8位自动重载方式,在这里用\是为不影响T0的工作*/TH1= 0xf3; /*当波特率为2400时,定时器初值*/ TL1= 0xf3; TR1= 1; /*定时器T1开始运行*/TI= 1; /*在SCON中已经设置,允许发送数据*/3、proteus中仿真电路 RXDTXD库函数scanf( )的接收原理:U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/ A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/ INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD3938373635343332212223242526272810111 21314151617RTSCTS18XTAL2P116273849DCDDSRRXDRTSTXDCTSDTRRI9RST293031PSENALEEAER RORCOMPIM12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.780C31RXDTXDRTSCTS1(1)(2)(3)(4)数码管,用于观察是否从串口读得数据上面虚拟终端观察单片机接受的外部信号是否有下面虚拟终端观察单片机发送的信号P1是虚拟串口COMPIM,必须与虚拟串口软件联用软件虚拟仪器设置2运行(1)产生HEX(2)装载HEX(3)打开虚拟串口3实验结果:实现了单片机此案串口发送提示信号,please input(1-9),等待从串口反馈的的信号,当在串口调试器中发送去输入7,发送后,上面一个虚拟终端显示7,当单片机接受该信号后,显示出来,并进行运算,结果再次送到串口。

Keil C51程序调试过程

Keil C51程序调试过程

如何使用Keil C软件调试单片机程序调试普通都是在发生错误与意外的情况下使用的。

如果程序能正常执行,调试不少时候都是用不上的。

所以,最高效率的程序开辟还是程序员自己做好规范,而不是指望调试来解决问题。

单片机的程序调试分为两种,一种是使用软件摹拟调试,第二种是硬件调试。

使用软件摹拟调试,就是用计算机去摹拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的。

但是软件调试存在一些问题,不可能像真正的单片机运行环境那样执行的指令能在同一个时间完成(往往比单片机慢)。

软件调试只能是一种初步的,小型工程的调试,比如一个惟独几百上千行的代码的程序,软件调试能很好的完成。

硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到仿真器,然后与单片机一样执行。

仿真器仿真全部的单片机资源(所有的单片机接口,并且有真正的引脚输出)。

仿真器会将单片机内部内存与时序等情况返回给计算机,这样 就可以在计算机里看到单片机程序真正的执行情况。

不仅如此,还可以通过计算机的软件实现单步、全速、运行到光标的常规调试手段。

仿真器可以接入实际的电路中。

图1:仿真器下面将具体介绍如何使用Keil uVision 软件来调试单片机程序。

首先:打开一个已经编译通过的单片机项目。

选择Debug下面的Start/Stop Debug Session,这个选项可以打开调试也可以关闭调试。

接下来看到的窗口就是调试窗口了:下面具体说说相关子窗口的功能:1、左侧的ProjectWorkspaceRegs是片内内存的相关情况值;Sys是系统一些累加器、计数器等。

Regs很简单就不多说。

具体介绍一下Sys:a 累加器ACC,往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。

b 寄存器B,主要用于乘法和除法操作。

spsp_maxdptr 数据指针DPTR。

PC $states 执行指令的数量。

keil的调试步骤与方法

keil的调试步骤与方法

keil的调试步骤与方法Keil调试步骤与方法Keil是一款常用的嵌入式开发环境,用于编写和调试嵌入式系统的程序。

在进行嵌入式开发过程中,调试是一个非常重要的环节,它可以帮助开发人员找出程序中存在的问题并进行修复。

本文将介绍Keil的调试步骤与方法,帮助读者更好地进行嵌入式开发与调试。

一、准备工作在使用Keil进行调试之前,我们需要先进行一些准备工作。

首先,我们需要安装Keil软件,并配置好开发板的硬件环境。

其次,我们需要将待调试的程序下载到开发板中,并连接上调试器。

最后,我们需要在Keil中打开待调试的项目文件,以便进行后续的调试操作。

二、设置断点在进行程序调试时,我们常常需要在程序中设置断点,以便在指定位置停下来观察程序的执行情况。

在Keil中,我们可以通过单击代码行号的方式来设置断点。

当程序执行到设置的断点位置时,会自动停下来,以便我们观察相关的变量值和程序执行流程。

三、单步执行单步执行是调试过程中常用的操作之一,它可以使程序以单步的方式执行,以便我们逐行观察程序的执行情况。

在Keil中,我们可以通过点击工具栏上的“单步执行”按钮来进行单步执行操作。

在单步执行过程中,我们可以观察变量的值的变化,以及程序的执行流程,帮助我们找出程序中的问题。

四、观察变量值在调试过程中,我们经常需要观察程序中的变量值,以便判断程序的执行是否符合预期。

在Keil中,我们可以通过“观察窗口”来观察变量的值。

在观察窗口中,我们可以添加需要观察的变量,并在程序执行过程中实时查看其数值的变化。

五、查看寄存器值在嵌入式系统中,寄存器是非常重要的硬件资源,它们直接影响着程序的执行。

在Keil中,我们可以通过“寄存器窗口”来查看寄存器的值。

在寄存器窗口中,我们可以查看各个寄存器的当前值,以便判断程序的执行是否符合预期。

六、调试输出除了观察变量和寄存器的值外,我们还可以通过调试输出来观察程序的执行情况。

在Keil中,我们可以使用printf函数来进行调试输出。

基于Keil与VSPD软件仿真的串口通信调试技术

基于Keil与VSPD软件仿真的串口通信调试技术

Ba e n K e la d V S s d o i n PD o t r m ul to S fwa e Si a in
Ya g S io g n hrn
( i a S i v l p n n sg n e ,W u a 4 0 6 ) Ch n h p De eo me ta d De in Ce t r hn 3 0 4
真器 , 增加 了资金 投 人 。另 外 , 统 的 调试 技 术 要 传 求调 试计算 机具备 串行 通信 口, 现在 很 多新型计 而
R ci / rnmie, ee eT as t r通用异 步收发接 口) v t 通信 的
编程 与调试成 为 单 片机 智 能仪 表 系统 开 发 的重 要 内容 。串 口通信 程序 的传统 调试技 术 , 往往 需要 利 用专用 的单 片机 硬 件仿 真器 和 调 试计 算 机 。在 编 写好程序 后 , 用 仿 真 器来 设 置 断 点 , 利 观察 变量 和
用l, 串 E ( l 其 2 ] l UAR Unv ra y c rn u T, i sl Asn h o o s e
步对程 序进行 调试 、 正错误 。 修 传 统调试 技术对 硬件仿 真器 依赖 性较 强 , 但是 很多仿真 器不 能做到完 全硬 件仿 真 , 因而 可能造 成 仿 真时 正常 , 实 际 运行 时 出现 错 误 的情 况 , 者 而 或 造 成仿 真不能 通 过 , 但是 实 际运 行 正 常 的情 况 ; 当 单 片机芯 片型号 发生较 大变化 时 , 需要 配 置新 的仿
总 第 14 9 期 21 0 0年第 8期
舰 船 电 子 工 程
S i e to i g n e i g h p Elc r n c En i e r n

Keil串口软件仿真调试技巧

Keil串口软件仿真调试技巧

Keil串口软件仿真调试技巧Keil串口软件仿真调试技巧收藏Keil C51 整合了目前功能最强的C51编译器和最好的IDE调试环境。

在新版本的Keil中,增加了很多功能,其中之一就是串口仿真。

就是说无须实际的硬件,利用计算机的串口就可以完全进行串口仿真。

使用到的调试命令:ASSIGN 将计算机的串口设置为单片机的串口语法:ASSIGN channel < inreg > outreg例如:ASSIGN COM1 < SIN > SOUT上面的括号不能少。

MODE 设置串口的参数(波特率、数据位、停止位等)语法:MODE COMx, baudrate, parity, databits, stopbits例如:MODE COM2, 19200, 0, 8, 1实际软件调试时,先在Keil中完成程序的编写,然后进入软件仿真状态,并用一根自制的串口线将计算机的两个串口环接起来(注意2与3要交叉,5可以接也可以不接)。

这里需要计算机上至少要有两个串口,一个是仿真单片机用,另外一个是通信调试用,不然就需要两台计算机了。

在仿真状态下,使用上面的两个命令设置好串口的参数(每次都输入参数会比较麻烦,这时可以在仿真参数中设置好配置文件)。

在计算机中使用任何串口调试软件与Keil进行通信,可以在Keil中设置断点,实际结果与硬件仿真器的效果一样,还更加简单方便。

更多的用法可以参考Keil的帮助文件DBG51.CHM=====================================================步骤如下:1、使用KEIL,把需要调试的程序编译连接并进入源程序DEBUG;2、在command里输入:MODE COM1 19200,0,8,1 回车MODE COM1 19200,1,8,1 回车(即:把pc的COM1口设置成波特率19200,无校验,8位字符位,1位停止位)3、在command里输入:ASSIGN COM1 SOUT(即:把pc的COM1口与keil仿真的串口0关联起来,如果你仿真的是串口1,那么就是S1IN,S1OUT。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1楼主:有关Keil软件仿真的串口调试技巧贴子发表于:2008/10/29 8:43:55引言在单片机系统中,串口(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,…即单片机的串口号)。

图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模拟的单片机串口上,用户程序可以通过中断处理程序或查询方式接收到这些数据;同样,单片机程序中发送到单片机串口上的数据也会通过被绑定的计算机串口发送出来,可以被其他软件所接收。

利用这个特点,就可以方便地仿真、调试单片机的串口部分程序。

要注意的是,这两个命令需要一起使用。

2.3 仿真步骤首先,用串口线将计算机的两个串口连接起来(或者是两台计算机上的两个串口)。

这两个串口一个用来模拟单片机串口,另一个给调试程序使用。

这个由用户自己分配,没有特殊要求。

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

然后,设置工程文件(Project)的相关参数,如图2和图3所示。

主要是选择软件仿真模式(Use Si mulator)以及晶振参数。

图2 仿真参数设置为了不必每次进入仿真状态后,都需要输入串口参数设置命令,可以建立一个初始化文件。

初始化文件是一个普通的文本文件,内容就是仿真时需要的命令,按照顺序一行输入一条。

如图2所示,建立了一个debug.ini的初始化文件。

这样,当每次进入仿真调试状态时,Keil就会自动载入debug.ini的内容进行初始化。

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

这个参数非常重要,直接影响通信的波特率,可以按照实际使用的参数进行设置。

要注意,这个参数的单位是MHz。

设置好参数后,就可以进行仿真了。

单击工具栏的图标按此在新窗口浏览图片进入Debug(仿真调试)状态,在Output window窗口中的command文本框(一般是在左下角)中输入上面介绍的命令。

例如,将PC机的串口1设置为单片机的串口:mode com1 9600,0,8,1assign com1 Sout然后设置断点,一般是在关键地方或与串口相关联的地方设置。

再单击图标运行(Run)用户程序,使用户程序运转起来(不然是接收不到串口数据的)。

这时再使用串口调试软件或用户调试软件,发送通信命令或者数据包,看用户程序是否进入断点,以及相关的变量是否正确。

还可以有意发送带有错误数据的数据包,以观察用户程序的异常处理部分是否正常。

一旦发现程序中的错误,可以马上停止仿真调试,立即修改代码,然后再次重复上面的步骤进行仿真。

因为不需要与用户目标板联机,也不用下载代码到用户板上,所以速度非常高。

以上这些步骤和使用硬件仿真器的基本一样,只不过现在使用的是软件仿真。

需要注意的是:仿真时单片机串口实际的波特率由MODE命令来指定,单片机程序中的TMOD、SC ON等参数是不影响串口仿真状态的(也就是说这些参数不影响仿真的波特率,即使它们是错误的)。

但是中断的使能位(如ES、EA等)还是起作用的,如果ES或EA被禁止,那么就不会进入串口中断。

因为这种方法是利用计算机的串口来仿真单片机的串口,而仿真是通过Keil软件来转换串口上的数据,不是直接转发数据的,所以在实际仿真时,处理速度会比实际单片机运行时稍微低一点。

比方说仿真状态时1 s只能发送/接收10个数据帧,但在单片机硬件上运行时可能1s就可以接收/发送50个数据帧。

这与使用的计算机的速度有关,但对仿真来说,是没有任何影响的。

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

基本上,使用这种方法需要占用计算机的串口数量是单片机绑定串口的2倍。

一个串口被Keil占用,用来模拟单片机的串口;另外一个串口被计算机占用,用来给单片机的串口收发数据。

3 小结这里介绍的方法对C51和汇编语言都是适合的。

它最大的好处就是简单、方便,容易使用,不需要使用任何电路,也没有特殊的要求;甚至可以在硬件电路制作好之前就将串口部分的程序编写、调试完毕。

笔者使用这种方法已经很长时间了,事实证明这种方法确实非常有效。

其实对于51单片机,Keil的仿真功能实在是太强大了,只要充分掌握其特点,能够熟练利用它,就可以解决工作中的大部分问题。

很多工作都可以使用软件仿真来完成,根本无需任何硬件仿真器;只有一些新的外部器件的时序、接口的调试才有可能需要用到硬件仿真器。

目前介绍Keil软件仿真这方面的参考书籍很少,有些讲的还是老版本的用法,不过没有关系,Keil的帮助文件写得很详细、很清楚,只要认真看明白就会使用了。

使用熟练后,就会发现Keil的功能相当强。

对于串口编程,51单片机有Keil这个功能强大的开发软件,给我们带来了极大的便利;而在其他单片机软件的开发中,目前还没有这么强大的开发工具和方便的调试手段。

这里有个变通的办法,就是可以先在Keil中编写并调试好串口程序,然后将程序移植到其他单片机平台中(笔者在PIC18单片机开发中就使用了这种方法,收到了很好的效果。

当然这是指在使用C语言开发单片机程序时,汇编语言是没有可移植性的)。

至于如何能够减小程序移植的工作量,使得程序具有更好的通用性,以最小的代价就可以平滑地移植到其他单片机平台上,也是一个非常值得探讨的问题。

相关文档
最新文档