好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

(完整word版)KeilC51程序调试过程.doc

16页
  • 卖家[上传人]:ni****g
  • 文档编号:530443795
  • 上传时间:2022-11-29
  • 文档格式:DOC
  • 文档大小:911.04KB
  • / 16 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 完整word版)KeilC51程序调试过程如何使用Keil C软件调试单片机程序调试一般都是在发生错误与意外的情况下使用的如果程序能正常执行,调试很多时候都是用不上的.所以,最高效率的程序开发还是程序员自己做好规范,而不是指望调试来解决问题 单片机的程序调试分为两种,一种是使用软件模拟调试,第二种是硬件调试.使用软件模拟调试,就是用计算机去模拟单片机的指令执行,并虚拟单片机片内资源,从而实现调试的目的但是软件调试存在一些问题,不可能像真正的单片机运行环境那样执行的指令能在同一个时间完成(往往比单片机慢)软件调试只能是一种初步的,小型工程的调试,比如一个只有几百上千行的代码的程序,软件调试能很好的完成硬件调试其实也需要计算机软件的配合,大致过程是这样的:计算机软件把编译好的程序通过串行口、并行口或者USB口传输到仿真器,然后与单片机一样执行仿真器仿真全部的单片机资源(所有的单片机接口,并且有真实的引脚输出)仿真器会将单片机内部内存与时序等情况返回给计算机,这样 就可以在计算机里看到单片机程序真实的执行情况不仅如此,还可以通过计算机的软件实现单步、全速、运行到光标的常规调试手段仿真器可以接入实际的电路中。

      图1:仿真器 下面将具体介绍如何使用Keil uVision 软件来调试单片机程序首先:打开一个已经编译通过的单片机项目选择Debug下面的Start/Stop Debug Session,这个选项可以打开调试也可以关闭调试接下来看到的窗口就是调试窗口了:下面具体说说相关子窗口的功能:1、左侧的ProjectWorkspace Regs是片内内存的相关情况值;Sys是系统一些累加器、计数器等Regs很简单就不多说具体介绍一下Sys:a 累加器ACC,往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)b 寄存器B,主要用于乘法和除法操作spsp_maxdptr 数据指针DPTRPC $states 执行指令的数量sec 执行指令的时间累计(单位:秒) psw 程序状态标志寄存器PSW,八位寄存器,用来存放运算结果的一些特征量,如有无进位、借位等p 奇偶标志P.反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。

      f1ov 溢出标志位OVMCS-51反映带符号数的运算结果是否有溢出,有溢出时,此位为1,否则为0rsf0ac 辅助进位标志AC又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位),如有则AC为1状态,否则为0cy 进位标志CY(PSW 7)它表示运算是否有进位(或借位)如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0由于PSW存放程序执行中的状态,故又叫程序状态字.运算器中还有一个按位(bit)进行逻辑运算的逻辑处理机(又称布尔处理机) 根据指令执行的不同,上述值会有相应的变化,程序员可以监测这些在单片机中看不到的值而达到调试的目的虽然软件调试无法实现硬件调试那样的信号输出,但是软件调试也可以在软件窗口监测输出信号的高低电平,以及单片机相关端口的变化,实现模拟监测输出信号的目的上图所示,Port0,Port1,Port2,Port3就对应于单片机的四个P0,P1,P2,P3 口,共32个针脚这是全部打开后的效果有了输出,就应该有输入的设置:选择Interrupt这个按钮可以打开输入预设窗口,输入值窗口如下: 选择不同的Int Source 会有不同的 Selected Interrupt的变化,通过选择与赋值达到模拟输入的目的。

      接下来是串口的设置:出现设置串口的窗口: 监测窗口数据还有一个窗口:点击: 将会出现,这个窗口可以监测从串口输出的ASCII代码最下面还有一个定时器的设置:3个定时器与一个看门狗,设置定时器的数量与工程选择的单片机种类有关系,如果是8051就只有2个定时器,如果是选择8052 就有3个定时器了. 定时器的设置很简单: 参考的数很多,这里暂时省略介绍下面再介绍一下一些常用的调试按钮:就是Reset ,相当于单片机的复位按钮,按下后,所有的系统状态将变成初始状态.这是全速运行,相当于单片机的通电执行.这个是停止全速运行的按钮 step into 逐语句;进入并单步执行. step over 逐过程step out 跳出.执行到断点处.可以在代码所在窗口的最左边右击按钮插入一个断点,如下图所示: 有了这个功能,就可以控制监控要执行到某位置时系统的状态最后在介绍一个很实用的功能:这个是Disassembly Windows,按下后可以把C51 Disassembly 为相应的汇编语言,如果有汇编语言知识的话,就可以对比C51程序与汇编程序了。

      由于汇编语言的效率高很多,这也可以作为查看C51执行效率的一个方法上图中就可以看出,C51 代码是如何被解释为汇编的.调试还有很多的功能,这里只是介绍了一小部分,希望能起到抛砖引玉的作用,更多的细节需要你自己去发掘与学习.Keil C51程序调试过程用Keil C51编写程序时,经常需要调试,如果不是经常用这个软件的话,很容易忘记这些调试步骤,现在举一个例子“验证延迟函数delay()使其延迟的时间为500ms"说明.源程序写完后,就可以调试了,按照图1所示,先进行第一步和第二步操作,使界面切换到图2的状态,可以看到在文本编辑窗口中,有一个黄色箭头指向13行的位置,说明程序从这个位置开始执行.左上角有一些跟调试相关的按钮,如“全速执行”、“单步进入”……对于这个例子,目的是验证delay()函数的延迟时间,使其大约为500ms按照下列方法可以达到这个目的: 图1 编译界面图2  调试界面点击“单步跳出"按钮(或功能键F10),黄色箭头从第13行往下移一行(14),再单击“单步跳出”,则箭头移到15行那边,表示程序从第13行执行到第15行(注:这种方式是一步一步执行程序.如果要同时执行几行,比如从第13行一下子执行到15行,可以作如下操作:先用鼠标在第15行的位置处点击两下会出现一个图2所示的红色图标;然后点击“全速执行”按钮,则黄色的箭头会从第13行快速移到15行。

      即:这两行同时被执行)此时左边寄存器窗口中的sec有一个数值,表示程序执行的时间,即delay()函数的延迟时间.如果延迟时间不是500ms,可改变delay()函数中x,y的数值,再点击图1的第二步所对应的按钮切换到图1所示的编译界面,点击“重新构造所有对象文件"编译程序,然后再切换到图2的界面上来进行调试重复上面的步骤,直到左边寄存器窗口中的sec(单位秒)数值大约为050s,即可说明delay()延迟时间为500ms注:这种方法比较麻烦,而且延迟时间不会很精确,如果要精确延迟的话可采用定时器的方式.)Keil C调试案例-—优化导致的问题如下是一个简单的Keil C中的小程序:#include

      2、在局部变量i,j定义前加上Volatile,禁止Keil C优化这两个变量如下:volatile unsigned char i,j; 调试OK!KEIL-C调试点滴问:用KEIL写C代码,做完以后的调试工作应该如何开展?只有PC机,没有任何的硬件设备2 楼good02xaut(good)回复:用自带的编译功能然后查错误写完代码后,F7编译,Alt+F5调试,F10单步运行.可以查看寄存器的值以及RAM的内容还可以改变P1~P3口的输入KEIL就是一个开发仿真一体的4 楼zhou_huanxi(阿周)回复:Keil C本身就是编译与仿真一体的当不要外部数据时很方便,可以使用Keil C自带的软件调试器(软件仿真器),有单步运行,设置断点等功能当要外部输入时(比如用定时器作计数器用),有两种处理方法:(1)做产品时最好是用硬件仿真器调试.(2)学习时可用以下方法:Keil C提供了几个调试输入用的窗口,可用它们来模拟输入;调试函数由自己根据需要按特定的格式来编辑,再按KEIL C的要求调入即可下面给出用定时器作外部事件计数时模拟外部输入的调试函数,并写出Keil C调用的步骤如下:步骤一:编写如下信号函数:single void t0_singal(void){while(1){PORT3|=0x10; //pull INT0(P3。

      4) high againPORT3&=~0x10; //pull INT0(P34) low and generate interruptPORT3|=0x10; //pull INT0(P34) high againtwatch(CLOCK); //wait for 1 second}}步骤二:在DEBUG状态下选择:DEBUG》“Function Editor(Open Ini File)",这时,将弹出两个新屏幕,将其中的“打开”窗口关闭;保留“Function Editor窗口;步骤三:在Function Editor窗口中输入上面的函数:single void t0_singal(void)步骤四:保存(注意:扩展名为ini),编译该程序,成功后关闭Function Editor窗口;步骤五:执行用户程序(必须连续执行);步骤六:在屏幕左下脚的命令窗口中,键入t0_singl()后(必须回车),Keil C便可向P34源源不断地提供脉冲信号。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.