51单片机串口通信入门实战:从寄存器配置到上位机收发
2026/08/26 01:04:19
串口通信是单片机开发中最基础也最实用的一项功能,无论是调试打印、与上位机交互,还是连接蓝牙、WiFi模块,几乎每个项目都会用到。很多初学者在51单片机上点亮LED之后,第一件事就是让开发板和电脑"说上话",而串口正是这座桥梁。本文从寄存器层面完整拆解51单片机串口通信的实现过程,带你从零跑通"开发板-电脑"的第一条数据链路。
一、51单片机串口的硬件基础标准51单片机(如STC89C52、AT89S52)内置一个全双工UART,引脚为RXD(P3.0)和TXD(P3.1)。发送数据时,CPU把数据写入SBUF发送寄存器,移位寄存器按设定的波特率逐位送出;接收时,外部数据逐位移入接收移位寄存器,接收完整一帧后自动置位RI标志并允许程序读取。整个过程由硬件自动完成,程序只需要做好寄存器配置和标志位处理。STC系列单片机还常带第二组串口(如STC12的S2),用法大同小异。
二、串口初始化:核心寄存器逐位讲解初始化串口只需要配置三个关键寄存器:一是SCON,控制串口的工作方式,常用方式1(8位UART、波特率可调),即SCON = 0x50,开启接收使能REN;二是PCON,其最高位SMOD控制波特率是否加倍,通常置0;三是定时器1的TMOD和TH1/TL1,串口方式1的波特率由定时器1溢出率决定。波特率计算公式为:波特率 = (2^SMOD / 32) × 定时器1溢出率。以11.0592MHz晶振、9600波特率为例,定时器1工作于方式2(8位自动重装),可算得TH1 = 0xFD,误差为0。这也是为什么串口通信开发板普遍选用11.0592MHz晶振——它能整除出标准波特率。
三、发送与接收:轮询和中断两种写法发送一个字节的经典写法是:SBUF = dat;等待TI标志置1后清零TI,即可继续发送下一个字节。接收则轮询RI标志,RI为1表示一帧数据接收完成,读取SBUF即可。相比轮询方式,用串口中断让程序在后台收发更高效:开启ES和EA中断,在串口中断服务函数中根据RI、TI分别处理接收和发送,主程序不用死等。对于需要持续收发数据的项目,串口中断接收是51单片机串口编程的高频技巧,务必熟练掌握。
四、连接上位机:从串口助手到自定义协议硬件上把开发板的TXD、RXD通过USB转TTL模块连接到电脑,注意交叉连接(TXD对RXD),并共地。打开串口助手软件(如STC-ISP自带串口助手、SSCOM、XCOM等),选择对应COM口,设置波特率9600、数据位8、停止位1、无校验,即可收发数据。进阶用法是在此基础上自定义通信协议,例如用帧头+长度+数据+校验的方式封装一帧,让上位机能够可靠地解析批量数据。学会寄存器配置与上位机收发后,串口通信这门基本功就真正过关了,后续无论是做设备调试还是数据采集项目都会事半功倍。
一、51单片机串口的硬件基础标准51单片机(如STC89C52、AT89S52)内置一个全双工UART,引脚为RXD(P3.0)和TXD(P3.1)。发送数据时,CPU把数据写入SBUF发送寄存器,移位寄存器按设定的波特率逐位送出;接收时,外部数据逐位移入接收移位寄存器,接收完整一帧后自动置位RI标志并允许程序读取。整个过程由硬件自动完成,程序只需要做好寄存器配置和标志位处理。STC系列单片机还常带第二组串口(如STC12的S2),用法大同小异。
二、串口初始化:核心寄存器逐位讲解初始化串口只需要配置三个关键寄存器:一是SCON,控制串口的工作方式,常用方式1(8位UART、波特率可调),即SCON = 0x50,开启接收使能REN;二是PCON,其最高位SMOD控制波特率是否加倍,通常置0;三是定时器1的TMOD和TH1/TL1,串口方式1的波特率由定时器1溢出率决定。波特率计算公式为:波特率 = (2^SMOD / 32) × 定时器1溢出率。以11.0592MHz晶振、9600波特率为例,定时器1工作于方式2(8位自动重装),可算得TH1 = 0xFD,误差为0。这也是为什么串口通信开发板普遍选用11.0592MHz晶振——它能整除出标准波特率。
三、发送与接收:轮询和中断两种写法发送一个字节的经典写法是:SBUF = dat;等待TI标志置1后清零TI,即可继续发送下一个字节。接收则轮询RI标志,RI为1表示一帧数据接收完成,读取SBUF即可。相比轮询方式,用串口中断让程序在后台收发更高效:开启ES和EA中断,在串口中断服务函数中根据RI、TI分别处理接收和发送,主程序不用死等。对于需要持续收发数据的项目,串口中断接收是51单片机串口编程的高频技巧,务必熟练掌握。
四、连接上位机:从串口助手到自定义协议硬件上把开发板的TXD、RXD通过USB转TTL模块连接到电脑,注意交叉连接(TXD对RXD),并共地。打开串口助手软件(如STC-ISP自带串口助手、SSCOM、XCOM等),选择对应COM口,设置波特率9600、数据位8、停止位1、无校验,即可收发数据。进阶用法是在此基础上自定义通信协议,例如用帧头+长度+数据+校验的方式封装一帧,让上位机能够可靠地解析批量数据。学会寄存器配置与上位机收发后,串口通信这门基本功就真正过关了,后续无论是做设备调试还是数据采集项目都会事半功倍。