技术文档

调试单片机程序 51单片机程序及调试步骤实战经验

小编 2024-10-10 技术文档 23 0

51单片机程序及调试步骤实战经验

我刚参加工作的时候,用的是stc 51单片机的,51单片机不像stm32那样可以通过st-link在keil上面在线仿真。

有时候出现bug的时候,非常难找问题,要一段一段屏蔽然后测试。

在刚开始接触开发的时候,我非常不习惯用在线仿真,大概是因为没用过。

记得有一次进了一家公司做行车记录仪,用的台产GRAIN的单片机。

那时候基本上没什么资料,就一个dada sheet和demo程序。

在开发之前,老大安排了给我一个任务,就是把这个仿真环境先给搭起来。

相当于是他们原厂没有的东西,让我去搞定,这个芯片是基于Fa626TE core的32位控制器。

网上的资料太少了,光是测试搭建这个环境花了半个多月,最后还没搭建出来。

那个时候完全是懵逼状态,摸着石头过河,不知道仿真啥原理,反正网上搜到一个我就试一个。

做这个之前基本都是在做51的东西,所以对我来说太难了,加上资料又少,就是跨级打boss。

后面我有点不耐烦,就跟老大说:这个我不用仿真了,以前不用仿真照样也能把产品做出来。

后来老大思考了一下,还是希望能想把仿真搞出来,我有点崩溃,实在想不明白为何他这么固执。

当我后面慢慢接触32位的单片机多了,开发的产品多了,我才真正体会到了仿真的好处。

毫不夸张地说,用好仿真,你的开发效率至少提高3倍,这里说的不是仿真软件。

拿stm32单片机举例,用st-link+keil在线硬件仿真,不但能监控程序怎么跑的,还能监控跑过程中变量的值的变化,指针地址的变化。

用熟了你就知道,特别是做指针的应用,实在太香了,有时候指针指来指去,你的理解可能只是在自己的理论层面上,而用仿真你可以监控到指针的指向变化。

那像51这种,不能像stm32那样用st-link在线仿真怎么办?(现在51好像也有了,具体没用过)

大家别小看51单片机,有些51内核的ROM都有几十K,最终产品程序的大小并不会比stm32的小。

这种如果没仿真,那出现一个BUG,够你调半天了。

在过去的开发中,我也总结了一些经验,大家可以借鉴下。

我一般是借助产品硬件上一切能作为提示的东西,比如说:

1.数码管

2.LCD

3.LED灯

4.串口

我在开发程序的时候,第一个做的肯定是点亮一个LED灯。

点亮LED能够最快地让你验证硬件核心部分(单片机最小系统)有没有问题,

点亮以后,我再开一个定时器它每秒闪烁1次,直到产品大多数功能完成。

这样做的好处就是可以验证你程序有没有跑着跑着死机之类的问题,如果有,那就及时解决,不然后面程序大了找起来会更难。

如果有数码管和LCD,调试起来会更加得心应手,直接在数码管和LCD上显示要调试的数据即可,虽然没仿真这么方便,但是总比都没有好。

还有就是串口,一般硬件在第一次打板的时候,我都会把串口预留出来,方便调试,特别是做物联网产品,串口调试可以说是必备的。

主要作用就是用来监控MCU和WiFi模组之间的通讯数据。

最后,还有一种情况就是产品啥都没有,连LED都没有,这种情况该怎么办?

这种情况就只能听天由命了,完全靠你的开发经验。

一般第一板硬件设计成这样的,都是初级水平工程师,经验不足。

即便你产品用不到那些资源,好歹把串口或者LED预留出来,把整体功能调试完以后最终一板把它去掉不就行了?

单片机系统硬件调试方法

单片机的系统硬件调试,通常有静态调试和动态调试两种不同,前者是通过目测、万能表测试、加电检查、联机检查的方法,在加电于样机之前.对样机的型号规格,以及安装要求等进行核对,同时检查电源系统.防止极性错误情况和电源短路情况的出现,同时对系统总线的重点检查后者则是在开发系统的基础上.利用开发系统的人机界面.访问和控制用户系统各个部分的电路.以找出系统运行过程中存在的问题.对故障进行一一排除。因此,单片机的系统硬件调试,需要从硬件的静态调试和动态调试两个角度人手:

单片机系统硬件的静态调试

1、逻辑故障的排除在制板设计和加工的过程中.由于工艺性的错误.单片机容易出现错线、开路和短路的问题。排除这种故障的方法是根据原理图,对照加工印制板.确保原理图和印制板的一致.同时检查电源系统,重点注意是否存在电源短路和极性错误的问题.具体的做法是检查地址、数据和控制总线.该过程可以利用数字万能表进行功能测试。另外,还需要检查元件是否失效.根据设计要求,检查其型号、规格和安装等,确保元件没有烧坏.以及安全无误.该过程可以采用替换法进行排除。

2、电源故障的排除

在通电之前.检查电源电压的辐值和极性,以免损坏集成块,在加电之后.对各个插件上引脚的电位进行检查.检查VCC和GND的电位.一般情况下电位为5-4.8V。如果属于高压通电,则要调试联机仿真器.经检查仿真器失效,则说明系统的集成块已经烧坏。

单片机系统硬件的动态调试

(1)利用示波器和万能表等基本工具,检查信号线的连结状态和时序.以便外围电路出现读写错误。单片机的信号线有多种类型,譬如读信号线、写信号线、时钟信号线、复位信号线等,这些信号线大多数发出脉冲信号.这种信号一般利用示波器观测.但观测效果并不佳,笔者认为要利用软件编程的方法.检测出译码片选信号.具体的做法将地址送人DPTRHE和将译码地址外RAM中的内容送入ACC,同时进行适当延时和循环.再利用示波器观测引出脚.非错误状态时存在周期性的负脉冲波形.否则表示译码信号存在错误。这种方法适用于电平类信号的测试.复位信号用示波器即可。

(2)在断电情况下,将所有的元器件插上,并连接在线仿真器和系统.然后打开电源和启动在线仿真器.进行在线仿真调试。在调试过程中.经常出现三种故障.第一种是通电之后,电源的指示灯不亮,以及电位系数为零.此时可以用万能表检测电源的插座。如果发现存在虚焊问题.对其进行重新焊接之后,再接人电源,发现指示灯正常亮起,说明电位已经开始趋于正常:第二种是3O脚用示波器进行检测.输出的时钟频率非常弱.此时则要检查3O脚是否接高电平.如果没有.则要进行重新焊接.直到稳定输出时钟脉冲;第三种是键盘按下之后,蜂鸣器不会发声,可以通过更换蜂鸣器.检查是否损坏。

(3)在启动定时功能之后.定时功能通过数码管提示。如果数码管上小数点管脚被烧坏.则可通过更换LED显示器.如果小数点显示仍然不正常,则要进行软件调试。语音模块的调试.要用逻辑电路调试,检查时钟芯片是否正常工作.如果掉电后不能够保存时钟的数据.则表示运行不正常.要求更换时钟芯片的电池。

(4)辅助交流电源漏电流检测保护装置应用的要求是.借助电流传感器.将电压传输并在液晶上显示.其中分为输入电流和输出电流两路漏电装置设计的方案是将微电流互感器配置在辅助电流上.以便检测时候显示具体的漏电流.同时设置漏电流的保护值.确定具体的保护信号。漏电保护装置的总体结构是由电流采样电流、电源模块、串行通信构成单片机.并提供数字输出功能、数字输入功能、键盘输入功能、液晶显示功能。漏电保护装置设置在机车上,可以显示漏电流量,并比较漏电流质和存储保护值,作为外部继电报警的依据。除此之外.我们还需要根据机车系统的扩展升级需求.选择合适型号单片机.其中高速、低功耗、抗干扰是单片机最基本的功能,其外围电路模块有利于抗干扰和保证电路输出输入的安全.而交流采样电路转变正旋交流电压.将信号输入单片机。

结束语

综上所述.单片机的系统硬件调试.包括静态调试和动态调试两种.需要检查元件是否失效.根据设计要求,检查其型号、规格和安装等.确保元件没有烧坏.同时利用软件编程的方法,检测出译码片选信号,具体的做法将地址送入DPTRHE和将译码地址外RAM中的内容送入ACC,同时进行适当延时和循环,再利用示波器观测引出脚.以及开发系统的基础上.利用开发系统的人机界面,访问和控制用户系统各个部分的电路,以找出系统运行过程中存在的问题.对故障进行一一排除。

相关问答

单片机调试 的方法和步骤?

单片机调试是指通过逐步检查和验证硬件和软件的运行情况,以确保单片机系统的正常工作。下面是一般的单片机调试方法和步骤:1.准备调试环境:确保您拥有适当...

如何在线实时监控 调试单片机程序 运行?

在线实时监控调试单片机程序运行只有一种方式:程序在线仿真。在线实时监控单片机程序运行可以有多种方式:在线仿真;程序实时输出运行状态(可通过LED,LCD等显...

单片机程序 怎么在电脑上 调试 ?用什么软件好?-笔记本-ZOL问答

KEILC.最好用串口当做调试数据通道,电脑上串口助手或自编软件。仿真那些看着高大上,其实不实用,因为单片机程序都很短,且都与硬件接口打交道,仿真...

单片机调试 原理?

Jlink是用来对软件的单步调试的,他是将宿主机上的程序(就是通过rvds或ads生成的*.axf)经过Jlink送到arm板子上调试;串口和和USB连接是为了通信,宿主机上用s...

单片机 系统 调试 的目的?

单片机系统的调试目的是降低系统成本,提高系统适应性,它包含有硬件调试和软件调试.硬件调试是整个系统调试的基础,只有排除明显的硬件故障后才能进行软件的设...

单片机调试 时跳过部分指令?

应该是被KeilC给优化了,这个不用担心。你调试时,执行的过程是否跟自己想的结果一样?应该是被KeilC给优化了,这个不用担心。你调试时,执行的过程是否跟自己...

怎么用labview编写 单片机 烧写 程序 -ZOL问答

在单片机开发过程中,从硬件设计到软件设计几乎是开发者针对本系统特点亲自完成的。这样虽然可以降低系统成本,提高系统的适应性,但是每个系统的调试占去了总开...

上位机用串口 调试 助手发送十进制数, 单片机 收到后在数码管显...

返回给上位机是没有变化的,只是显示数制不一样了。单片机在收到数据后直接把数据按十进制分成几位再动态显示在数码管上。这个如果要帮忙的话,看左...

上位机用串口 调试 助手发送十进制数, 单片机 收到后在数码管显...

这个如果要帮忙的话,看左下角返回给上位机是没有变化的,只是显示数制不一样了。单片机在收到数据后直接把数据按十进制分成几位再动态显示在数码管...

关于用USB转TTL小板给STC 单片机 烧写 程序 及串口 调试 的问题?

嘿嘿,你用的是USB的那种通用下载线吧?上面一共有4(5)根线,其中5根的是有两种供电电压。你这个是5V的,你用5V的就好。把USB上的5V电压连上单片机的VCC,然...

猜你喜欢