SJ-006 实训项目 · 精品课程

串行通信
应用实训

基于 STC89C52RC 单片机 UART 串口与串行方式 0 移位寄存器,从单片机向电脑发送字符到 74LS164 扩展数码管显示,系统掌握串行通信原理与应用。

6 个递进子项目 汇编语言实战 含 UART 与 74LS164
首页 实训项目 串行通信应用
串行通信接口 · 核心实训

串行通信应用 · 6 大经典实训

本项目以 STC89C52RC 单片机串行口为核心,覆盖 UART 异步串行通信的发送、接收、PC 与单片机双向交互,以及串行方式 0 配合 74LS164 移位寄存器扩展 LED 与数码管显示,全面训练串行接口设计与编程能力。

6 大递进式子项目
汇编语言
约 8 学时
配套评分标准
PROJECT MATRIX

6 大经典实训一览

由简到难,循序渐进掌握串行通信 · 点击任意卡片开始学习

基础实训 进阶实训 综合实训
01 基础实训

单片机向电脑串口发送固定字符

UART初始化 · 波特率设置

SJ-006-01 开始学习 →
02 基础实训

电脑串口下发指令控制单路 LED 亮灭

串口接收 · RI标志

SJ-006-02 开始学习 →
03 进阶实训

电脑下发数字,数码管同步显示接收数值

串口接收 · 数码管译码

SJ-006-03 开始学习 →
04 进阶实训

单片机循环上传 8 路 LED 状态至电脑串口

读取端口 · 串口发送

SJ-006-04 开始学习 →
05 综合实训

串行方式0用74LS164芯片实现8位流水灯

方式0移位 · 74LS164扩展

SJ-006-05 开始学习 →
06 综合实训

串行方式0用74LS164芯片实现1位数码管9-0倒计时

方式0移位 · 段码表查表

SJ-006-06 开始学习 →

单片机向电脑串口发送固定字符

基础实训
实训编号
SJ-006-01
实训类型
UART发送
实训学时
40分钟
适用年级
高二,高三
指导教师
王老师

1 项目简介

本项目是串行通信入门的第一个实验,通过单片机 UART 串口向电脑连续发送固定字符(如大写字母 'A'),学习串口初始化和数据发送的基本流程。单片机 TXD 引脚经过 USB 转串口模块连接到电脑,在串口调试助手中即可观察到发送的字符。

掌握本项目后,学生将理解 STC89C52RC 单片机串行口控制寄存器 SCON、电源控制寄存器 PCON 中 SMOD 位的作用,学会使用定时器 1 产生波特率,理解 SBUF 发送缓冲区和 TI 发送中断标志位的工作机制。

2 电路图

电路图

电路说明

  • • 单片机 P3.1(TXD)通过 USB 转串口模块连接到电脑
  • • UART 方式 1,8 位数据,波特率 2400bps
  • • Timer1 工作于模式 2,作为串口波特率发生器
  • • 单片机 TTL 电平需经 USB 转串口模块转换,不可直接接 RS232 电平

3 程序内容(汇编语言)

;==================================================
; 项目名称:单片机向电脑串口发送固定字符
; 芯片型号:STC89C52RC
; 时钟频率:12MHz
; 串口参数:方式1,8位UART,波特率2400bps
; 功能说明:上电后单片机循环向PC发送字符 'A'
;==================================================
        ORG     0000H          ; 程序从复位向量 0000H 开始
        LJMP    MAIN           ; 跳转到主程序入口

; 主程序入口
; 功能:完成串口初始化,然后循环发送字符 'A'
MAIN:   LCALL   UART_INIT      ; 调用串口初始化子程序

; 主循环:不断发送固定字符 'A'(ASCII码为41H)
LOOP:   MOV     A, #'A'        ; 将待发送字符 'A' 装入累加器 A
        LCALL   UART_SEND      ; 调用串口发送子程序
        LCALL   DELAY500       ; 延时约500ms,控制发送间隔
        SJMP    LOOP           ; 返回继续循环发送

;==================================================
; 子程序:UART_INIT
; 功能:初始化 STC89C52RC 串行口为方式1,波特率2400bps
; 参数:无;返回:无
; 说明:
;   1. SCON = 0101 0000B = 50H,表示方式1,允许接收REN=1
;   2. TMOD = 0010 0000B = 20H,定时器1方式2(8位自动重装)
;   3. 晶振12MHz,机器周期1us,SMOD=0,波特率2400时:
;      TH1 = 256 - fosc/12/32/2400 = 256 - 13.02 ≈ 243 = 0F3H
;==================================================
UART_INIT:
        MOV     SCON, #50H     ; 串口方式1,允许接收
        MOV     TMOD, #20H     ; 定时器1方式2,自动重装
        MOV     TH1, #0F3H     ; 装载定时器1初值(2400bps)
        MOV     TL1, #0F3H     ; 装载低字节初值
        SETB    TR1            ; 启动定时器1
        RET

;==================================================
; 子程序:UART_SEND
; 功能:将累加器 A 中的 1 字节数据通过串口发送出去
; 参数:A = 待发送数据;返回:无
; 说明:写入 SBUF 后硬件自动启动发送,发送完毕 TI 置 1,
;      软件查询到 TI=1 后必须手动清 0,否则下次无法判断
;==================================================
UART_SEND:
        MOV     SBUF, A        ; 将数据写入发送缓冲寄存器 SBUF
WAIT_TI:
        JNB     TI, WAIT_TI    ; 查询发送中断标志 TI,为0则等待
        CLR     TI             ; 发送完毕,软件清0 TI 标志
        RET

; 约500ms延时子程序
DELAY500: MOV   R7, #250
D5_1:   MOV     R6, #200
D5_2:   MOV     R5, #10
D5_3:   NOP
        DJNZ    R5, D5_3
        DJNZ    R6, D5_2
        DJNZ    R7, D5_1
        RET

        END                    ; 程序结束

4 评分标准

评分项 分值 评分标准
串口初始化 30分 SCON、TMOD、TH1/TL1、PCON 配置正确
程序编写 40分 代码正确、规范,注释清晰
功能实现 20分 串口调试助手能稳定收到字符 'A'
实训报告 10分 报告内容完整、整洁

5 注意事项与安全规范

电平匹配

单片机 TTL 电平需通过 USB 转串口模块与电脑连接,不可直接接 RS232 电平

波特率一致

单片机波特率必须与串口调试助手设置一致,否则显示乱码

TI 标志

发送前必须查询并清零 TI,否则可能丢失数据或无法启动下一次发送