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

article/2025/10/14 20:37:00

【记录】一次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即可:
在这里插入图片描述
改完后,添加修改后的程序,重新进行仿真,结果如下,问题解决。

在这里插入图片描述


结语

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


http://chatgpt.dhexx.cn/article/ADeUBn6o.shtml

相关文章

## 51单片机串口通讯

1,接线方式: RXD: 数据输入引脚;对应stc89的P3.0口; TXD:数据的发送端口;对应P3.1口; 注意:单片机的的串口TX,RX与外设交叉接线; 2串口编程要素 输出/输入数据缓冲器S…

51单片机串口通信详解

文章目录 前言一、计算机通信简介二、串口通信简介1、简介2、同步通信和异步通信2.1 同步通信2.2 异步通信 3、串行通信的传输方式4、串口通信硬件电路5、常见接口介绍 三、串口相关寄存器详解1、特殊功能寄存器SCON2、PCON寄存器3、TMOD寄存器(定时器工作方式寄存器…

51单片机串口接收处理

目的: 通过51单片机串口外设功能,来对一组数据进行处理,新手刚刚入门可能会将串口接收到的一个数据直接赋值给一个变量,然后用这个变量做相应功能,可是这样写的不稳定性太高了,有可能会接收不到你要的那个数据&#…

51单片机串口通信原理

计算机串行通信基础 通信有串行通信和并行通信两种方式 串行通信: 将数据字节分为一位一位的形式在一条数据线上逐个传送。如下图所示 串行通信特点:传输线少,长距离传送时成本低,且可以利用电话网等现成设备,但数据的…

51单片机串口点灯

#include "reg52.h" #include "intrins.h" sfr AUXR 0x8e; sbit D5 P3^7; //定义led 接在P3.7void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //配置串口工作方式1,RE使能接收数据 0101 0000PCON 0x00; TMOD &0x0F;TMOD |0x2…

51单片机串口使用

文章目录 前言一、串口概念二、中断中的RI、TI和SUBF1.RI2.TI3.SUBF 三、串口波特率的计算四、代码的编写总结 前言 今天将为大家讲解51单片机的串口原理及代码编写。 一、串口概念 51单片机串口是一种通信接口,它可以将51单片机与外部设备连接起来,实…

51单片机串口通信

串口通信 1、通信的基本概念2、 51单片机串口介绍2.1、串口通信简介2.2、串口内部结构2.3、串口通信寄存器SCONPCON 2.4、串口工作方式 3、串口使用方法3.1、硬件3.2、通信协议RS2323.3、串口初始化 4、硬件设计5、 软件设计6、拓展 串口的通信,一般是检测通信模块是…

UART串口通信

什么是串行通信? 将数据字节分成一位一位的形式在一条传输线上逐位地发送。 优点:成本低,控制复杂。 什么是异步通信? 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。 异步通信的两…

MCU-51:单片机串口详解

目录 一、计算机通信简介二、串口通信简介2.1 同步通信2.2 异步通信 三、串行通信的传输方式四、串口通信硬件电路五、常见接口介绍六、串口相关寄存器详解6.1 特殊功能寄存器SCON6.2 PCON寄存器6.3 TMOD寄存器 七、代码演示-单片机和电脑通信7.1 串口向电脑发送数据7.2 电脑通…

51单片机学习入门(三):串口

1.串口是什么? 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。 51单片机内部自带UART(…

51单片机——串口通信(发送和接受数据)

目录 一、实现的功能 二、串口通信 2.1单片机发送数据 2.1.1串口初始化 2.1.2串口发送程序 2.1.3发送效果 ​2.2单片机接收数据 2.2.1串口初始化 2.2.2接收数据程序 2.2.3接收效果 一、实现的功能 通过串口(UART)让单片机与计算机进行通信。51单…

51单片机-串口通信

目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部结构 2.5.相关寄存器 2.6.工作模式(模式1) 2.7.如何配置串口中断 3.实际应用…

IDEA调试注解处理器AbstractProcessor

1.右击项目Open In->Terminal 执行命令mvnDebug clean package 查看端口号 2.添加远程调试配置监听的端口 3.debug启动远程调试就欧克了

强大的IDEA调试工具

在开发中难免会遇到bug,而如何去跟有效率的去修复bug,除了必要的经验之外,巧妙的使用工具也是非常有必要的。 一下就是对IDEA强大调试工具的介绍 在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动…

IntelliJ IDEA调试显示表达式结果

今天无意中看到使用IntelliJ IDEA调试代码时,可以看到某段表达式的结果,如 在调试时,若想看到optStu.get().getName()的值该怎么做? 只需选中它 然后右键 点击Evaluate按钮即可出现result

idea 调试 java,将Intellij-IDEA调试器附加到正在运行的java进程

Is it possible to attach Intellij-IDEA debugger to a running java process? 解决方案 Yes! Here is how you set it up. Run Configuration Create a Remote run configuration: Run -> Edit Configurations... Click the "+" in the upper left Select the …

idea调试unity里面的lua代码

前言 本人一名java后端开发,看到前端同事调试lua代码无脑print,甚为鄙视,百度加实操写一份调试unity的lua脚本文档 操作 1.安装lua lua官网下载页面 最终下载页面 2.idea安装插件 emmylua 3.idea打开unity的lua脚本 idea->file->op…

idea调试maven项目

maven debug 调试 关联maven项目启动调试进行调试 关联maven项目 启动调试 进行调试

宝塔 xdebug idea 调试 php

安装宝塔 安装php xdebug插件 查看是否安装成功 phpinfo 修改php.ini 配置 [XDebug] ;xdebug.profiler_append 0 ;xdebug.profiler_enable 1 ;xdebug.profiler_enable_trigger 0 ;xdebug.profiler_output_dir "D:\BtSoft\temp\xdebug" ;xdebug.trace_output_di…

IDEA调试程序的基本方法

IDEA基本调试步骤 版本 IntelliJ IDEA 2020.1 x64 操作系统 Windows10 64位 步骤 先上一段代码,求解如下问题,因为涉及了循环,判断等,可以用于调试 问题:寻找某两个数相除,其结果 离黄金分割点 0.618最…