浅谈单片机调试方法(精品)

浅谈单片机调试方法(精品)

ID:44383150

大小:42.00 KB

页数:4页

时间:2019-10-21

浅谈单片机调试方法(精品)_第1页
浅谈单片机调试方法(精品)_第2页
浅谈单片机调试方法(精品)_第3页
浅谈单片机调试方法(精品)_第4页
资源描述:

《浅谈单片机调试方法(精品)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、浅谈单片机调试方法(希望对初学者有帮助)傅绍兵2011-01-311.利用I/O1.1利用LED进行可视化管理这种方法需要有多余的I/O。(如果可能,也可以将实现次要功能的I/O暂吋借来一用。)其电路很简单,一个LED通过限流电阻接到VCC电源。I/O设置为输出方式。我们可以用下面的宏来定义LED的操作。#defineLED_YELLOW_ON()PA6D=0#defineLED_YELLOW_OFF()PA6D=1#defineLED_YELLOW_FLASH()PA6DA=1举个例子说明它的用法。在低功耗的产品设计中,我们一

2、般采用“睡眠T醒來工作T睡眠T醒來工作”的工作模式,其程序结构如下:while(l){HLT=1;//进入睡眠nop();clear_WDT();//清看门狗〃醒来,处理各种事务}如果我们在程序醒来吋点亮LED,事务处理完毕吋熄灭LED,那么我们就能“看见”程序的工作状态,LED将周期性地闪烁。这就是我们称之为可视化管理的原因。(不记得在哪木书上看到“可视化管理”这个概念,我借用一下)其软件结构是这样:while(l){HLT=1;//进入睡眠nop();clear_WDT();//清看门狗LED_YELLOW_ON();//d

3、ebug〃醒乗,处理各和事务LED_YELLOW_OFF();//debug}其实有些仿真器已经提供了这种监视程序睡眠状态的方法。如果没有提供,就可以用以上方法自行实现。它的使用很灵活。比如可以用来在双时钟系统中监视快时钟的打开和关闭情况(慢时钟一般总是打开,因为要用作实时时钟的时钟源,而且慢时钟耗电很小)。你可以在打开快时钟时点亮LED,关闭快时钟时熄灭LED,这样一来快时钟的打开和关闭就一目了然了。你也可以在某个屮断屮将LED的状态取反(使用LED_YELLOW_FLASH()),用来监视此屮断的产生是否正常。虽然设置断点也

4、可以知道屮断是否产生,但会屮断程序的执行,造成不便。如果你想知道程序有没有执行到某个地方,你也可以将LED_YELLOW_FLASH()放到该位置。依次类推,你可以用这个方法观察任何你想观察的事件。当然你必须互斥地观察不同的事件。就是说,对于一个LED,在一次调试中,一般只能观察一个事件,否则你口己也弄不清LED的变化到底是代表发生哪一事件。另外,你还可以同时使用两个或者更多不同颜色的LED来监视不同的事件,前提你有多余的I/O。不中断程序的执行,又能看到程序的执行情况,应该说是一种很有效的调试程序的方法。相比开发工具所提供的单

5、步、断点、观察变量等调试手段,这可以算是一种有效的补充。1.2利用示波器测试时间利用上而的方法,再加一个示波器,就可以测量程序执行的时间了。(你可以自己决定接不接LED)o比如,在初始化程序屮,在打开总中断Z前,写如下代码:LED_YELLOW_ON();nop();LED_YELLOW_OFF();使用示波嘉,在捕获模式下,你应该能捕获到一个脉冲,测试它的宽度,假如为30.5us。以OKIML610Q431为例,一条nop指令包括1cycles,1cycles包括1systemclocko这里systemclock等于振荡周期

6、。(注意,不同的单片机对cycles,systemclock的定义是不同的,需要参考各自的用户手册)。那么我们可以这样计算振荡器的频率:1*1*(1/0=30.5/1000000.f=32786Hz当然,如果示波器测量精度不够,可以多放几个nop指令,计算时再求平均。如果嫌示波器的捕获模式太麻烦,还可以采用循环结构,输出一串方波。比如:while(l){LED_YELLOW_ON();nop();LED_YELLOW_OFF();nop();clear_WDT();〃清看门狗}这种方法的使用也很灵活。你可以用来测试主循环的执行时

7、间,调用某个函数所花的时间,以及某个中断处理的时间(不包括响应中断和退出中断的时间)等等。当你发现某些时候主循环的执行时间特别长时,可以采用逐步缩小范围的方法来找出到底是哪个函数花费时间长,冇没冇可能将其优化。下面是测试主循环执行时间的程序结构。while(l){HLT=1;//进入睡眠nop();clear_WDT();〃清看门狗LED_YELLOW_ON();//debugFunl();Fun2();Fun3();Fun4();LED_YELLOW_OFF();//debug}如果发现上面的执行时间异常(比如太长),你可以调

8、整测试的位置,如下所示:while(l){HLT=1;//进入睡眠nop();clear_WDT();//清看门狗Fun1();LED_YELLOW_ON();//debugFun2();Fun3();Fun4();LED_YELLOW_OFF();//debu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。