产品概述

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

小编 2024-10-12 产品概述 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预留出来,把整体功能调试完以后最终一板把它去掉不就行了?

51单片机 ESP8266模块 APP控制继电器,物联网DIY入门新手指南

题目

大家好,超子能力有限,技术不高,有什么错误的地方,欢迎批评指正。超子之前写过一篇STM32单片机配合ESP8266的WiFi模块接入阿里云生活物联网平台的DIY实验,有小伙伴问我51单片机能不能实现,答案是能。那么今天超子就给大家介绍下51单片机的实现方法。

程序设计中,我们使用的软件是Keil集成开发环境,C语言编写。如果大家想要程序源码的话,可以私信我,超子不是专业的程序员,水平不高,大家不嫌弃就行。

一说到51单片机的型号那就太多了,因为我们要使用MQTT协议对接阿里云生活物联网平台,所以对RAM空间要求比较多,一些常见的型号比如89C51,89C52,因为RAM空间太少不能用,所以我们本次DIY程序设计使用的单片机型号是STC12LE5A60S2。

ESP8266模块是通过串口AT指令控制的那种,网上有很多,价格也比较便宜,非常适合我们做DIY。

虽然我们前面使用STM32单片机做了第一个DIY设计,但是考虑到有些小伙伴,没有看过,所以超子还是说的详细一点,把每一个步骤再重新走一遍。

图1

首先进入我们自己的阿里云生活物联网平台,然后创建项目,我们就创建一个51单片机DIY项目吧,以后所有51单片机相关的DIY设计,我们都加入到这个项目内。

图2

项目建立完毕后,可以在项目列表中,看到51单片机DIY项目,旁边的第一个DIY设计项目,是上次STM32单片机DIY设计时建立的。然后我们点击51单片机DIY项目,进入项目管理界面。

图3

接下来,我们需要创建新产品。

图4

产品名称就叫51单片机插座,大家也可以起自己喜欢的名字。然后所属品类选择电工照明下的插座。节点类型选择设备,不接入网关,因为ESP8266可以连接WiFi路由器,直接具备接云的能力,所以是直连设备,不需要网关。连网方式一定要注意,虽然ESP8266是WiFi模块,但是不能选择WiFi连网,因为我们使用的是通用的,AT指令控制的ESP8266,没有在阿里云生活物联网平台认证,不兼容阿里云生活物联网平台APP的配网协议,如果我们选择WiFi方式的话,配网过不去,程序设计就无法进行了。所以我们取个巧,使用蜂窝连接方式,跳过阿里云生活物联网平台APP的配网,我们可以用ESP8266模块自己的APP配网或是直接把WiFi的SSID以及密码写在程序里。然后数据格式选择JSON,不适用ID2认证,最后点击完成就行了。

图5

产品建立完成后,我们要先进行第1步的功能定义的设置,我们选择的是电工照明分类下的插座,所以阿里云生活物联网平台自动帮我们添加了电源开关的功能属性。所以这一步我们不需要做什么额外的设置,直接点击下一步:设备调试。

图6

我们新建设备的时候,为了跳过配网协议,所以故意选择了蜂窝的连接方式,所以我们随便选一个通过认证的模组就行,选哪个型号都不会影响我们的DIY设计。

图7

选好模组后,我们点击新增测试设备,每个产品下可以添加最多50个免费的测试设备,我们做DIY程序设计,50个足够我们用了。

图8

新增测试设备时,我们要输入设备名称,就叫D001吧,超子喜欢用这种编号命名设备,大家可以根据喜好自己设置设备名称,然后点击确定就行。

图9

然后会弹出激活凭证,也就是三元组信息,这个是登录阿里云生活物联网平台的认证信息,稍后我们修改51单片机C语言程序时要用到这些重要信息。然后我们点击下一步:人机交互。

图10

和使用STM32单片机做DIY设计时一样,我们使用阿里云生活物联网平台的公版APP,也就是云智能APP。我们打开上图中红圈所示的开关。

图11

然后我们点击未设置,选择一个界面。

图12

自己喜欢哪个,选一个就行,然后点击确认。

图13

然后页面下方,我们要配置APP功能,同STM32单片机DIY时一样,我们主要设置多语言管理,填写品牌名称,设备名称,产品编号等等,大家根据喜好自己填一个就。最下方我们看到了天猫精灵,插座是天猫精灵支持的品类,所以可以直接绑定天猫精灵的账号,用天猫精灵控制开关,非常方便。然后我们点击下一步:批量投产。

图14

我们勾选上充分了解的对勾,然后点击开发完成,到此我们整个项目的配置就算完成了,就下来我们要修改51单片机的程序了。

图15

首先看esp8266.c源文件,wifi_mode变量用于设置使用哪种方式进行配网,大家根据注释自行选择就行,如果选择0的话,SSID和密码要在esp8266.h头文件中设置。

图16

然后我们需要修改mqtt.h头文件中的6个字符串,最麻烦的就是第3个,也就是MQTT协议中CONNECT报文中的包含的密码信息。我们一个一个来,讲一下怎么修改。

我们先看第6个需要修改的字符串,服务器的域名,格式如下所示:

*.iot-as-mqtt.cn-shanghai.aliyuncs.com

我们把*号替换成我们自己设备的ProductKey,这个ProductKey就是我们新建设备时弹出的3元组信息,图9所示,以我新建的设备作为例子,我们修改一下,最终结果如下:

a1jWDQfzbVB.iot-as-mqtt.cn-shanghai.aliyuncs.com

然后看第4和第5个字符串, 都是Topic主题,第4个set是用来接收控制开关命令推送的Topic,我们需要订阅它,第5个post是用来往服务器上传数据的,这次的实验post不是关键点。那么这两个Topic再那找呢?看下图。

图17

测试设备点击红圈圈中的查看。

图18

然后在Topic列表下,可以看到post和set,根据自己设备的实际内容,修改程序中第4和第5个字符串即可。

接下来看第1个字符串,也就是MQTT协议中CONNECT报文中包含的客户端ID信息,格式如下:

*|securemode=3,signmethod=hmacsha1|

其中*号是设备名称,以我的设备为例,修改一下,结果如下:

D001|securemode=3,signmethod=hmacsha1|

然后再看第2个字符串,也就是MQTT协议中CONNECT报文中包含的用户名信息,格式如下:

*&#

其中*号是设备名称 ,#号是ProductKey,都是图9中的三元组信息,就以我的设备为例,修改一下,结果如下:

D001&a1jWDQfzbVB

最后再看最麻烦的第3个字符串,也就是MQTT协议中CONNECT报文中包含的密码信息,需要经过一步加密,我们先要构建待加密的明文字符串,格式如下:

clientId*deviceName*productKey#

其中*号是设备名称 ,#号是ProductKey,以我的设备为例,修改一下,结果如下:

clientIdD001deviceNameD001productKey a1jWDQfzbVB

加密用的秘钥是图9中,三元组信息里的DeviceSecret,我们网上找一个加密算法的网站。

图19

我们复制待加密的字符串和密钥的时候,一定要多检查,不要多空格,不要多回车,错一点加密后的结果都不会正确的,所以大家一定要小心。加密后的结果就是第3个字符串的内容,到此6个需要修改的字符串我们都修改完毕了,重新编译程序,下载到开发板就行了。然后我们再回到阿里云生活物联网平台。

图20

我们进入第3步,人机交互设置页面,我们点击红圈所示的内容,然后弹出页面,需要我们填写设备名称,以我的为例,填上D001,然后就可以生成我们需要的,添加设备的二维码,因为文章中不能出现二维码,所以超子就不展示了。到此我们本次51单片机的DIY程序设计,基本就完成了。

大家如果有什么想做的,或者有什么想法,都可以评论区留言告诉超子哦~~~

想要程序的小伙伴,可以举手哦~~~

相关问答

51 系列 单片机 编程指令表怎么用?

使用51系列单片机编程指令表,首先需要了解指令表的结构和编码方式。指令表按照操作码进行分类,每个操作码对应不同的指令。在编程时,根据需要选择相应的指令,...

51单片机 如何修改程序引脚?

51单片机的程序引脚一般是通过设置寄存器来进行修改的。以下是一般的步骤:1.使用C语言或汇编语言编写程序,并定义需要修改的引脚的相关寄存器。2.将需要修改...

如何控制 51单片机 的引脚?

对于51单片机大家都不陌生,电子类专业的学生,在大学期间都学习过51单片机,再加上单片机易操作、资料多,所以非常受欢迎。51单片机有40个引脚,常用的封装为DI...

如何用手机通过esp8266实现对 51单片机 的控制,求源代码?

使用ESP8266做过项目,这类问题,不管是WIFI还是蓝牙,或者其他的数据传输手段,简单的说都需要一个通信协议,这个协议可以很简单,比如0xAA,具体可以分为下面...

新手应该如何学习 51单片机 及其他电子硬件?

提问者:请问新手应该如何学习51单片机及其他电子硬件?学习单片机要多练习,多实践。开发板要实现的功能,上手就能写出来。只是会(编程)操作开发板了。还要...提...

51单片机 用C语言或者汇编程序如何实现定时1秒?如何设定初始值?如何计算?如何输出方波?如何对外部?

使用定时器实现1秒定时;初始值要看单片机配置的晶振频率了,若12M晶振,初始值为TH0=0x3c;TL0=0xb0;这才是50ms,还要一个单元做计数器,计数20次才是1秒方波...

51单片机 怎么改变蜂鸣器的声音?

51单片机通过三极管放大驱动电流改变蜂鸣器的声音因为蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动...

51单片机 怎么与电脑键盘相接,USB的-ZOL问答

51单片机本身并不支持USB协议,如果需要使用USB设备,则需要用软件模拟出USB协议,或者借助其它USB接口芯片才可以实现。与PS/2协议相比,USB协议非常复杂,使用程序...

51单片机 的程序语言有哪几类?

51单片机的程序语言有汇编语言和C语言。汇编语言是一种面向机器的编程语言,能直接操作单片机的硬件系统,如存储器、I/O端口、定时/计数器等。优点:指令效率...

51单片机 函数如何调用?

单片机函数的调用通常需要使用函数名和参数列表来调用。首先需要在程序中声明函数的原型,包括函数名和参数列表。然后在程序中可以通过函数名和传入的参数来调...

猜你喜欢