1. 串口通信基础与硬件准备
第一次接触51单片机串口通信时,我被那一堆专业术语搞得晕头转向。后来才发现,串口通信就像两个人打电话一样简单。想象一下,单片机(MCU)和电脑(PC)就像两个需要交流的朋友,串口就是他们之间的电话线。
硬件连接上,你需要准备一个USB转串口模块(比如CH340G),这是连接单片机和电脑的桥梁。我常用的接法是:模块的TXD接单片机的P3.0(RXD),模块的RXD接单片机的P3.1(TXD),GND对接GND。这里有个容易踩的坑:千万别把TXD对TXD直接相连,就像打电话时不能把两个话筒对在一起,必须交叉连接才能正常通信。
关于通信参数,波特率就像通话时的语速。常见的有9600、19200等,新手建议先用9600bps。记得用STC-ISP软件里的波特率计算器生成初始化代码,能避免手动计算的错误。我刚开始调试时,因为波特率不匹配,接收到的全是乱码,折腾了半天才发现问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 深入理解关键寄存器
2.1 SCON寄存器:串口的控制中心
SCON寄存器就像串口的"大脑",我用示波器实测过各个位的功能。最常用的配置是模式1(8位UART),设置SM0=0、SM1=1。REN位特别重要——它像接电话的开关,设为1才能接收数据。TI和RI这两个标志位需要特别注意:必须用软件清零,我有次忘了清TI导致数据只发送一次就卡死。
2.2 PCON寄存器与波特率计算
PCON的最高位SMOD是波特率的"加速开关"。当SMOD=1时,波特率会翻倍。通过STC-ISP工具可以看到,使用11.0592MHz晶振时,9600波特率对应的定时器初值是0xFD。这里有个实用技巧:如果通信不稳定,可以尝试降低波特率或启用SMOD。
2.3 SBUF寄存器的双面性
SBUF这个寄存器很特别——它实际上是两个寄存器共用同一个地址。发送时写入SBUF,数据进入发送缓冲区;读取SBUF时,数据来自接收缓冲区。我做过实验:如果在接收中断里直接修改SBUF,不会影响发送过程,这验证了它们的物理独立性。
3. 从零编写通信代码
3.1 初始化流程详解
完整的初始化需要5个步骤:
- 设置SCON为0x50(启用接收)
- 配置PCON的SMOD位
- 定时器1设为模式2(8位自动重装)
