【记录】一次51单片机串口乱码问题排查

  • 项目场景
  • 问题描述
  • 原因分析
  • 解决方案
  • 结语

项目场景

在51串口收发仿真实验中使用两个单片机互相通信,程序设定A上电1s后通过串口以16进制给B发送AA,直到B收到AA后回复BB,当A机确认收到AA后开始发送数据,若接受过程中出现错误,B给A发送FF,A确认收到后重新发送。


问题描述

前几天,老师发给我一份实验文件让我帮助排查一个问题,实验目的如项目场景介绍,但在Proteus中仿真遇到乱码问题。


原因分析

解压文件后,我将整个工程备份后直接打开Proteus仿真软件(这里我电脑上使用的是Proteus 8 )直接运行,观察现象如图:

可见,串口监视器接收到的数据,明显发生偏差,出现乱码。停止仿真后,检查各元件配置,因为程序设定通信数据为16进制,串口通信波特率为9600,监视器数据模式对应设置为16进制如图:

确定保存配置参数,重新点击运行按钮,问题发生变化。即,原来乱码不变为数据简介乱码,发现A循环发送的数据不管是否正确,如图监视器显示为16进制了:

此时尚未检查程序,于是打开keil 编辑器,检查程序,在大体上并未发现什么明显问题,但发现串口波特率配置是12MHz晶振模式下的9600。于是返回仿真软件,点开单片机配置界面,发现晶振配置也是12MHz,如此一来似乎并没有什么逻辑上的错误。陷入一阵沉思,想了想是不是老师也是看到这里才问我的呢?

顿悟: 正当我起身伸懒腰的时候,想到了STC ISP这个软件,因为恰好在老师发来文件的前一刻,正好在他们官网看有没有什么新品,于是想到使用它生成串口配置程序,在重写一个完成任务。
但是,当我选好参数,12MHz 、9600、8为数据,选用定时器1做波特率发生器,点击生成C代码后,看到了误差百分数,,,,,顿感不妙。
果然,当我将程序编译添加到仿真后,串口监视器打印不稳定。到这前面的问题也就算是解决了,只需要稍作修改。


解决方案

将A、B两个单片机晶振频率改为11.0592,因为这个频率是最常用的,用它来产生的串口波特率误差较小。

知道了,原因,返回程序将串口配置一改,然后将仿真单片机晶振改为11.0592即可:

改完后,添加修改后的程序,重新进行仿真,结果如下,问题解决。


结语

我们在使用各单片机的时候总会遇到问题,无论是学习还是做项目的过程其实都是在不断积累经验,不断成长,有时候可能就是一个和很简单或很小的问题,但如果你没有意识到或者自认为没有问题,就像一开始排查,检查程序的仿真软件配置都没有问题,最后却是因为误差。。。
最后,欢迎留言交流。

【记录】一次51单片机串口乱码问题排查相关推荐

  1. 51单片机串口通信【收集学习向】

    本篇整理了学习51串口通信过程中看到的一些比较好的文章,有很多的超链接.并根据自己遇到的情况分析了串口传输乱码的一些原因. 目录 1.原理知识 2.测试程序和虚拟仿真 3.电路设计与公母口连线 电路设 ...

  2. 中移4G模块-ML302-OpenCpu开发-51单片机串口转I2C

    B站:https://space.bilibili.com/309103931 中移4G模块-ML302专栏:https://blog.csdn.net/qq_33259323/category_10 ...

  3. 51单片机串口通信实操(中断函数)

    51单片机串口通信实操(中断函数) 详细参考单片机手册 SM0.SM1分别为0,1时为模式一,因为模式一最为常用 REN=1,为接收,REN=0,为不接收 当 SM0,SM1,SM2,REN,TB8, ...

  4. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  5. 51单片机-串口通信(串口向电脑发送信息电脑通过串口控制LED)

    文章目录 前言 一.串行通信口的功能以及串行通信口的结构及原理 1.1 串行通信口的功能 1.2 51单片机串口的结构 二.串行通信口的控制寄存器 2.1 串行控制寄存器SCON 2.2 电源控制寄存 ...

  6. 51单片机串口多机通信的原理与编程实现

    51单片机串口多机通信 需要用的的寄存器 (了解的可直接跳到下一节) TMOD 定时器/计数器模式控制寄存器 TCON 定时器控制寄存器 SCON 串口控制寄存器 PCON 电源控制位寄存器 IE 中 ...

  7. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  8. 51单片机串口通信模板_51单片机串口通信

    51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...

  9. 51单片机串口打印函数

    51单片机串口通信调试printf函数重定向输出打印 1.首先需要实现串口的发送和接收. 2.输出printf需要哪些步骤: 1)需要引入头文件 <stdio.h> 2)添加如下代码: c ...

最新文章

  1. 使用 Spring HATEOAS 开发 REST 服务--转
  2. 4、已知圆的半径radius= 1.5,求其面积
  3. 大型企业网络系统传输负载测试及分析
  4. php 数据库备份还原
  5. Python 入门指南 官网文档
  6. linux下查看网卡信息的命令
  7. oracle 12c sp2 0667,关于数据库安装的问题SP2-0667: Message file sp1.msb not found
  8. canon mp 258清零方法
  9. 计算机不学c语言的专业,关于高职计算机类专业学生学不好C语言的思考
  10. word文件怎么另存
  11. 高洛峰mysql_【干货】MySQL 安装与安全优化
  12. 守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
  13. poj 1655 树的重心
  14. 苹果电脑如何打印文件
  15. http://blog.csdn.net/anxpp/article/details/52108238
  16. 绘画初学者的入门知识点!非常简单的人物哭泣、伤心表情绘画技巧
  17. 区块链的九大应用场景和创新玩法
  18. 在找工作的过程中,面试一定要经历的逻辑推理题...
  19. 版本管理工具:Gitlab
  20. 深入理解计算机系统(3)——attack lab

热门文章

  1. leetcode-827:最大人工岛
  2. 基于window+Clion的CMake、MinGW与Cygwin配置指南
  3. 「 C++ 参数 」“(WPARAM wParam, LPARAM lParam)信息” 讲解
  4. Python标准库之Turtle
  5. linux下keras安装教程_keras安装及使用
  6. 原型与原型链的详细理解
  7. 与世界顶尖开源软件作者近距离接触
  8. 微信停止为苹果服务器,艰难选择!微信和支付宝如果停止在苹果手机上使用,会选择谁?...
  9. 安防监控那些知名品牌!
  10. php验证一个日期是否是工作日,如何判断一个日期是节假日还是工作日