本文转载自: http://www.cnblogs.com/ugoer/archive/2007/05/01/171986.html 作者:ugoer 转载请注明该声明。

先说一个概念:调试,在企业程序设计里(我把企业商务类型的软件开发叫企业程序设计,把单片机与驱动程序这样接触底层汇编与硬件相关的程序设计叫底层程序设计),调试一般都用来跟踪变量的赋值过程,以及查看内存堆栈的内容,查看这些内容的目的在于观察变量的赋值过程与赋值情况从而达到调试的目的。由于企业程序的宿主就是开发它的计算机本身,因此企业程序设计比起底层程序设计,特别是单片机的程序设计调试来的更直观,调试也更方便。

单片机的程序设计调试分为两种,一种是使用软件模拟调试,意思就是用开发单片机程序的计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的,但是软件调试存在一些问题,如计算机本身是多任务系统,划分执行时间片是由操作系统本身完成的,无法得到控制,这样就无法时时的模拟单片机的执行时序,也就是说 ,不可能像真正的单片机运行环境那样执行的指令在同样一个时间能完成(往往要完成的比单片机慢)。为了解决软件调试的问题,第二种是硬件调试,硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到硬件调试设备中(这个设备叫仿真器),仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出),仿真器可以接入实际的电路中,然后与单片机一样执行。同时,仿真器也会返回单片机内部内存与时序等情况给计算机的辅助软件,这样 就可以在软件里看到真实的执行情况。不仅如此,还可以通过计算机断的软件实现单步、全速、运行到光标的常规调试手段。

图 1 :仿真器

总结一下两者的不同与相同:

相同点:

1:都可以检测单片机执行时序下的片内资源情况(如R0-R7 、PC计数器等)

2:可以实现断点、全速、单步、运行到光标等常规调试手段。

不同:

1:软件调试无法实现直接连接硬件电路的调试,只能通过软件窗口虚拟硬件端口的电平输出情况而仿真器可以实现与单片机一样的功能的硬件连接,从某种意义上说这个时候仿真器就是一个单片机。

2:软件调试执行单片机指令的时间无法与真实的单片机执行时间画上等号,也就是说如果一个程序在单片机中要执行300us,可能在计算机中执行的时间可能会比这个长很多,而且无法预料。仿真器则是完全与单片机相同。

3:软件调试只能是一种初步的,小型工程的调试,比如一个只有几百上千行的代码的程序,软件调试能很好的完成,如果是一个协调系统,可能还需要借助几个单片机仿真器和相关的仪器才能解决。

4:软件仿真不需要额外花钱,而硬件需要,一个仿真器一般都上千元,同时可以仿真许多种单片机的工作。

最后,调试一般都是在发生错误与意外的情况下使用的,如果程序能正常执行调试很多时候是用不上的,所以最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题。

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

首先:打开一个已经编译通过的单片机项目(如何新建与编译单片机程序项目这里省略)

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

接下来看到的窗口就是调试窗口了:

下面具体说说相关子窗口的功能:

1:左侧的ProjectWorkspace

Regs是片内内存的相关情况值,Sys是系统一些累加器、计数器等。Regs很简单就不多说。具体介绍一下Sys

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

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

sp

sp_max

dptr  数据指针DPTR

PC $

states 执行指令的数量

sec  执行指令的时间累计(单位 秒)

psw 程序状态标志寄存器PSW,八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。

p  奇偶标志P。反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。

f1

ov  溢出标志位OV。MCS-51反映带符号数的运算结果是否有溢出,有溢出时,此位为1,否则为0。

rs

f0

ac  辅助进位标志AC。又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位),如有则AC为1状态,否则为0。

cy  进位标志CY(PSW7)。它表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0

由于PSW存放程序执行中的状态,故又叫程序状态字?运算器中还有一个按位(bit)进行逻辑运算的逻辑处理机(又称布尔处理机)

根据指令执行的不同上述值会有相应的变化,也正是为了监测这些在单片机中看不到的值而达到调试的目的。

虽然软件调试无法实现硬件调试那样的信号输出,但是可以通过软件窗口的模拟监测输出信号的高低电平以及单片机相关端口的变化。

上图所示,Port0,Port1,Port2,Port3就对应于单片机的四个P0,P1,P2,P3 口,共32个针脚。

这是全部打开后的效果。

有了输出,就应该有输入的设置:

这个按钮可以打开输入预设窗口,输入值窗口如下:


  选择不同的 Int Source 会有不同的 Selected Interrupt 的变化,通过选择与赋值达到模拟输入的目的。

接下来是串口的设置:


    这是设置串口的窗口

监测窗口数据还有一个窗口:

点击:将会出现,这个窗口可以监测从串口输出的ASCII代码。

关于串口的问题,以后我会有专门的文章介绍,这里就这样大致介绍一下。

最下面还有一个定时器的设置:

3个定时器与一个看门狗,设置定时器的数量与工程选择的单片机种类有关系,如果是8051就只有2个定时器,如果是选择8052 就有3个定时器了。

定时器的设置很简单:


参考的数很多,这里暂时省略了,以后以专门的篇幅介绍。

下面再介绍一下一些常用的调试按钮:


就是Reset ,相当于单片机最简系统的复位按钮,按下后,所有的系统状态将变成初始状态

这是全速运行,相当于单片机的通电执行。

这个就是停止全速运行的按钮。

step into 逐语句;进入并单步执行;单步执行

step over  逐过程

step out  跳出

 执行到断点处

可以在代码所在窗口的最左边右击按钮插入一个断点,如下图所示:

有了这个功能,你就可以控制监控要执行到某位置时系统的状态。

最后在介绍一下一个很实用的功能:

这个是Disassembly Windows,按下后可以把C51 Disassembly 为相应的汇编语言,如果你有 相应的汇编知识的话就可以对比C51 与汇编的对比了。由于汇编的效率高很多,这也可以作为查看C51执行效率的一个方法。


上图中就可以看出,C51 代码是如何被解释为汇编的。

其实调试还有很多的功能,我这里只是介绍了一小部分,希望能起到抛砖引玉的作用,更多的细节需要你自己去发掘与学习。

2005-6-10 于广州

如何使用Keil uVision2软件调试单片机程序相关推荐

  1. keil用c语言怎么编辑器,用keil软件编写单片机程序的步骤

    猜你感兴趣: 新手教程:单片机的学习实践步骤 运用单片机便是了解单片机硬件结构,以及内部资源的运用,在汇编或C语言中学会各种功用的初始化设置,以及完成各种功用的程序编制. 运用按钮输入信号,发光二极管 ...

  2. W7500如何使用KEIL通过SWD调试下载程序?

    解决方案: 1.下载W7500 128K FLASH project并拷贝到KEIL的FLASH文件夹:并按下图将W7500烧写算法添加到KEIL算法目录,并设置算法在RAM中运行的位置. 2.按下图 ...

  3. 慧静51单片机软件_MCS-51单片机程序求极值

    ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV DPTR,#地址 :存储数据的起始地址 MOV R2,#num-1  :对num个数求极值 MOV A,@DPTR    ...

  4. Keil C51软件的使用教程

    keil uvision2 C51软件我们在前面有所介绍,是目前功能最强大的单片机c语言集成开发环境,如果您没有此软件可以从这里下载:http://www.51hei.com/keil%CF%C2%D ...

  5. 【单片机】一文彻底搞懂单片机程序烧录

    前言   任何和电子相关的专业的同学,相信在大学期间都会接触到一个非常常用的设备--单片机,但是由于课程时间有限,很多人的学习主要还是为了完成课设任务,而不会去思考或研究其中的一些细节,其中就包括学习 ...

  6. 单片机c语言强制数据类型,写单片机程序数据类型相关

    最近在调试单片机程序,总是遇到一些开始认为不可思议的事情,后来解决了问题后发现,都是因为自己书写程序不严谨,其主要原因是没有注意c语言的数据类型的数据范围. 对有符号.无符号数据的使用存在误区,对类型 ...

  7. 单片机编程软件很简单(23),keil单片机编程软件调试stm32

    单片机编程软件的使用意义较强,不论是工作还是学习,单片机编程软件都是常被使用的软件之一.本文对于单片机编程软件的介绍将基于如何采用keil单片机编程软件调试stm32,如果你对单片机编程软件抑或本文内 ...

  8. 如何使用keil进行软件的程序调试

    如何使用keil进行软件的程序调试 分步阅读 我们在编写单片机的程序的时候经常会用到keil软件,但有时我们的程序运行不出正确不的结果,这时候就需要我们使用keil自带的调试功能一步一步的运行调试程序 ...

  9. keil uvision2 c语言调试,keil uvision2

    keil uvision2是款优秀的单片机开发工具,采用接近于c语言的语法来开发,功能全面,提供了源代码.功能导航器.模板编辑等功能,为开发者们提高了工作效率和项目开发周期,软件还能嵌入汇编,用户可在 ...

最新文章

  1. python计算多个模型在不同数据集上的预测概率、获取每个数据集上的最优模型、多个最优模型的ROC曲线进行对比分析
  2. 为什么RStudio Server这么慢?
  3. 天堂向左,六级考场向右
  4. 如何利用Winsock控件编写自己的Internet程序
  5. matplotlib绘图相关
  6. Java学习笔记之:Java 继承
  7. 噪声产生原因_皮带输送机异常噪声的5种情况、减速机断轴的原因和解决方法...
  8. kafka key的作用_震惊了,原来这才是Kafka的“真面目”!
  9. kali Linux 没有ip解决办法
  10. 126. PHP 加密
  11. RuntimeError: context has already been set(multiprocessing)
  12. [XA]读书感想:个人对敏捷软件开发宣言的理解
  13. BZOJ3517 翻硬币
  14. ubuntu下鼠标右键新建文档
  15. 利用js文件获取视频文件详细信息 如帧速率、总比特率等
  16. Qt-QCustomPlot
  17. 【SpringCloud-学习笔记】Docker基本操作
  18. MATLAB 画点图即连线
  19. html5工业相机,AVT工业相机
  20. 【云海轻站可视化DIY建站系统V1.0.28】功能模块+可视化编辑建站系统+商用多开版+插件+公众号

热门文章

  1. Java学习之JVM探究-2021-08-28~31
  2. 城市大脑已经几岁?城市大脑发展成熟度的年龄评估模型(修改版)
  3. EasyExcel设置自动列宽
  4. LCYのACM退役回忆录【兼2022西安威海赛后记录】
  5. PHP隐私保护通话,AX模式绑定接口_隐私保护通话 PrivateNumber_API参考_AX模式_华为云...
  6. PHP 的运行方式有哪些?
  7. html的表格分组标签简述优点,表格标签(table)深入了解
  8. 微课教学视频制作成品展示
  9. opencv-python实现PS中的油漆填充功能,一键填充颜色 以及opencv经常报错的可能原因
  10. 巧克力设计灵感_找到设计灵感的11种方法