单片机系统硬件调试方法
单片机的系统硬件调试,通常有静态调试和动态调试两种不同,前者是通过目测、万能表测试、加电检查、联机检查的方法,在加电于样机之前.对样机的型号规格,以及安装要求等进行核对,同时检查电源系统.防止极性错误情况和电源短路情况的出现,同时对系统总线的重点检查后者则是在开发系统的基础上.利用开发系统的人机界面.访问和控制用户系统各个部分的电路.以找出系统运行过程中存在的问题.对故障进行一一排除。因此,单片机的系统硬件调试,需要从硬件的静态调试和动态调试两个角度人手:
单片机系统硬件的静态调试
1、逻辑故障的排除在制板设计和加工的过程中.由于工艺性的错误.单片机容易出现错线、开路和短路的问题。排除这种故障的方法是根据原理图,对照加工印制板.确保原理图和印制板的一致.同时检查电源系统,重点注意是否存在电源短路和极性错误的问题.具体的做法是检查地址、数据和控制总线.该过程可以利用数字万能表进行功能测试。另外,还需要检查元件是否失效.根据设计要求,检查其型号、规格和安装等,确保元件没有烧坏.以及安全无误.该过程可以采用替换法进行排除。
2、电源故障的排除
在通电之前.检查电源电压的辐值和极性,以免损坏集成块,在加电之后.对各个插件上引脚的电位进行检查.检查VCC和GND的电位.一般情况下电位为5-4.8V。如果属于高压通电,则要调试联机仿真器.经检查仿真器失效,则说明系统的集成块已经烧坏。
单片机系统硬件的动态调试
(1)利用示波器和万能表等基本工具,检查信号线的连结状态和时序.以便外围电路出现读写错误。单片机的信号线有多种类型,譬如读信号线、写信号线、时钟信号线、复位信号线等,这些信号线大多数发出脉冲信号.这种信号一般利用示波器观测.但观测效果并不佳,笔者认为要利用软件编程的方法.检测出译码片选信号.具体的做法将地址送人DPTRHE和将译码地址外RAM中的内容送入ACC,同时进行适当延时和循环.再利用示波器观测引出脚.非错误状态时存在周期性的负脉冲波形.否则表示译码信号存在错误。这种方法适用于电平类信号的测试.复位信号用示波器即可。
(2)在断电情况下,将所有的元器件插上,并连接在线仿真器和系统.然后打开电源和启动在线仿真器.进行在线仿真调试。在调试过程中.经常出现三种故障.第一种是通电之后,电源的指示灯不亮,以及电位系数为零.此时可以用万能表检测电源的插座。如果发现存在虚焊问题.对其进行重新焊接之后,再接人电源,发现指示灯正常亮起,说明电位已经开始趋于正常:第二种是3O脚用示波器进行检测.输出的时钟频率非常弱.此时则要检查3O脚是否接高电平.如果没有.则要进行重新焊接.直到稳定输出时钟脉冲;第三种是键盘按下之后,蜂鸣器不会发声,可以通过更换蜂鸣器.检查是否损坏。
(3)在启动定时功能之后.定时功能通过数码管提示。如果数码管上小数点管脚被烧坏.则可通过更换LED显示器.如果小数点显示仍然不正常,则要进行软件调试。语音模块的调试.要用逻辑电路调试,检查时钟芯片是否正常工作.如果掉电后不能够保存时钟的数据.则表示运行不正常.要求更换时钟芯片的电池。
(4)辅助交流电源漏电流检测保护装置应用的要求是.借助电流传感器.将电压传输并在液晶上显示.其中分为输入电流和输出电流两路漏电装置设计的方案是将微电流互感器配置在辅助电流上.以便检测时候显示具体的漏电流.同时设置漏电流的保护值.确定具体的保护信号。漏电保护装置的总体结构是由电流采样电流、电源模块、串行通信构成单片机.并提供数字输出功能、数字输入功能、键盘输入功能、液晶显示功能。漏电保护装置设置在机车上,可以显示漏电流量,并比较漏电流质和存储保护值,作为外部继电报警的依据。除此之外.我们还需要根据机车系统的扩展升级需求.选择合适型号单片机.其中高速、低功耗、抗干扰是单片机最基本的功能,其外围电路模块有利于抗干扰和保证电路输出输入的安全.而交流采样电路转变正旋交流电压.将信号输入单片机。
结束语
综上所述.单片机的系统硬件调试.包括静态调试和动态调试两种.需要检查元件是否失效.根据设计要求,检查其型号、规格和安装等.确保元件没有烧坏.同时利用软件编程的方法,检测出译码片选信号,具体的做法将地址送入DPTRHE和将译码地址外RAM中的内容送入ACC,同时进行适当延时和循环,再利用示波器观测引出脚.以及开发系统的基础上.利用开发系统的人机界面,访问和控制用户系统各个部分的电路,以找出系统运行过程中存在的问题.对故障进行一一排除。
单片机调试方法浅析
1.1 利用LED进行可视化管理
这种方法需要有多余的I/O。(如果可能,也可以将实现次要功能的I/O暂时借来一用。)
其电路很简单,一个LED通过限流电阻接到VCC电源。I/O设置为输出方式。
我们可以用下面的宏来定义LED的操作。
#define LED_YELLOW_ON() PA6D=0
#define LED_YELLOW_OFF() PA6D=1
#define LED_YELLOW_FLASH() PA6D^=1
举个例子说明它的用法。在低功耗的产品设计中,我们一般采用“睡眠à醒来工作à睡眠à醒来工作”的工作模式,其程序结构如下:
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
//醒来,处理各种事务
如果我们在程序醒来时点亮LED,事务处理完毕时熄灭LED,那么我们就能“看见”程序的工作状态,LED将周期性地闪烁。这就是我们称之为可视化管理的原因。(不记得在哪本书上看到“可视化管理”这个概念,我借用一下)
其软件结构是这样:
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
LED_YELLOW_ON(); // debug
//醒来,处理各种事务
LED_YELLOW_OFF(); // debug
其实有些仿真器已经提供了这种监视程序睡眠状态的方法。如果没有提供,就可以用以上方法自行实现。
它的使用很灵活。比如可以用来在双时钟系统中监视快时钟的打开和关闭情况(慢时钟一般总是打开,因为要用作实时时钟的时钟源,而且慢时钟耗电很小)。你可以在打开快时钟时点亮LED,关闭快时钟时熄灭LED,这样一来快时钟的打开和关闭就一目了然了。
你也可以在某个中断中将LED的状态取反(使用LED_YELLOW_FLASH()),用来监视此中断的产生是否正常。虽然设置断点也可以知道中断是否产生,但会中断程序的执行,造成不便。
如果你想知道程序有没有执行到某个地方,你也可以将LED_YELLOW_FLASH()放到该位置。
依次类推,你可以用这个方法观察任何你想观察的事件。
当然你必须互斥地观察不同的事件。就是说,对于一个LED,在一次调试中,一般只能观察一个事件,否则你自己也弄不清LED的变化到底是代表发生哪一事件。
另外,你还可以同时使用两个或者更多不同颜色的LED来监视不同的事件,前提你有多余的I/O。
不中断程序的执行,又能看到程序的执行情况,应该说是一种很有效的调试程序的方法。相比开发工具所提供的单步、断点、观察变量等调试手段,这可以算是一种有效的补充。
1.2 利用示波器测试时间
利用上面的方法,再加一个示波器,就可以测量程序执行的时间了。(你可以自己决定接不接LED)。
比如,在初始化程序中,在打开总中断之前,写如下代码:
LED_YELLOW_ON();
nop();
LED_YELLOW_OFF();
使用示波器,在捕获模式下,你应该能捕获到一个脉冲,测试它的宽度,假如为30.5us。以OKI ML610Q431为例,一条nop指令包括1 cycles,1 cycles包括1 system clock。这里system clock等于振荡周期。(注意,不同的单片机对cycles, system clock的定义是不同的,需要参考各自的用户手册)。
那么我们可以这样计算振荡器的频率:1*1*(1/f)=30.5/1000000.
f=32786Hz
当然,如果示波器测量精度不够,可以多放几个nop指令,计算时再求平均。如果嫌示波器的捕获模式太麻烦,还可以采用循环结构,输出一串方波。比如:
while(1)
LED_YELLOW_ON();
nop();
LED_YELLOW_OFF();
nop();
clear_WDT(); //清看门狗
这种方法的使用也很灵活。你可以用来测试主循环的执行时间,调用某个函数所花的时间,以及某个中断处理的时间(不包括响应中断和退出中断的时间)等等。
当你发现某些时候主循环的执行时间特别长时,可以采用逐步缩小范围的方法来找出到底是哪个函数花费时间长,有没有可能将其优化。
下面是测试主循环执行时间的程序结构。
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
LED_YELLOW_ON(); // debug
Fun1();
Fun2();
Fun3();
Fun4();
LED_YELLOW_OFF(); // debug
如果发现上面的执行时间异常(比如太长),你可以调整测试的位置,如下所示:
while(1)
HLT = 1; //进入睡眠
nop();
clear_WDT(); //清看门狗
Fun1();
LED_YELLOW_ON(); // debug
Fun2();
Fun3();
Fun4();
LED_YELLOW_OFF(); // debug
这样,你就可以确定执行时间过长是不是因为Fun1()引起。如果不是,则继续调整测试位置,逐个排除,直到找到真正费时的函数,对其进行分析,看看有没有可能优化。
当然,我们还可以用两个或更多I/O对多个事件进行逻辑分析,观察他们的先后顺序以及测试其时间间隔。这种方法也很有用,很灵活。在此不详述。
2. 利用LCD进行可视化管理
如果你的产品带LCD显示,又没有多余的IO可供调试,或者你只是想临时的调试某个功能,那么你可以临时使用LCD上的某个图标来指示某个事件。当某个事情发生时,显示该图标,否则清除该图标。
如果想在程序运行中获得更复杂、更丰富的信息,可以对不同的事件显示不同的数值。
3. 小结
不中断程序的执行,又能观察程序的执行情况,应该说是一种很有效的调试程序的方法。相比开发工具所提供的单步、断点、观察变量等调试手段,这可以算是一种有效的补充。实际上,这些调试方法很像PC应用开发的printf调试手段。它可以在不打断程序运行的情况下,借助于I/O,LED,示波器,数码管或LCD显示,给出各种各样的提示信息,帮助我们调试程序。
相关问答
单片机 程序怎么在电脑上 调试 ?用什么软件好?_其他问答_系统粉KEILC.最好用串口当做调试数据通道,电脑上串口助手或自编软件。仿真那些看着高大上,其实不实用,因为单片机程序都很短,且都与硬件接口打交道,仿真...
单片机 做实物怎么进行 调试 ?回答如下:单片机做实物的调试可以分为硬件调试和软件调试两个方面。硬件调试:1.检查电路连接是否正确,包括电源连接、外设连接、接口连接等。2.使用万用表...
如何快速学习和掌握 单片机 知识及应用?单片机的学习只要掌握相应的方法,而且你又一点点相应的基础是完全能够快速掌握的,你需要从下面几个方面进行切入。1.学会读单片机的数据手册,了解他的外设功...
单片机 连接器与 调试 器区别?什么连接器,有很多中的啊,像RS485总线的连接器等的通信连接器,也有楼上说的那种用于电气连接的连接器。调试器,也是仿真器。是用于调试程序用的。什么连接...
单片机 上有多路串口一般哪路用作 调试 ?一般是用第一路串口做调试,因为第一路串口使用频率高,为默认串口。一般是用第一路串口做调试,因为第一路串口使用频率高,为默认串口。
请帮忙看一下 单片机 程序,串口 调试 工具是不停的收到数据,为何...EXCEL中COUNTIFS中多条件筛选中,多列中怎么实现多个“或”的功能。1万浏览6回答桃李竹杏下一家是什么生肖4479浏览5回答苹果5s手机可以插电信卡吗?1...
sst89e516 单片机 仿真时,串口 调试 ?用仿真芯片sst89e516在线调试,必须使用串口。应用程序的串口功能,就不能在线调试了。用仿真芯片sst89e516在线调试,必须使用串口。应用程序的串口功能,就不能...
单片机 的JTAG接口 功能 是什么-ZOL问答同时应该注意到jtag接口还可以用来调试程序。而调试程序(如ARM开发组件中的AXD)为了通过jtag接口去调试目标板上的程序,同样是使用pc的并口转jtag接口来实现与...
电脑连接 单片机 的时候,COM端口应该怎么 调试 ? - 菲菲_580F0AB...是串口么?如果是串口有很多问题需要注意的:第一,连线RXD,TXD要与单片机的TXDRXD对应(而且是RS232通信方式,),GND-GND,第二:软件设置:1、波特率;2、...
河北服务好的楼宇自控系统 调试 多少钱,楼宇自控系统 调试 够不...[回答]在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试...