C51_串口通信

通信协议介绍

并行通信和串口通信

  • 并行通信的各个位同时传输,每一位数据都需要一条传输线。优点是传输快,适合短距离传输,但是成本高
  • 串行通信将数据分成位的形式,在一条传输线上逐个传输

单工、半双工和全双工数据传输

  1. 单工数据传输
    只有一方能接受或发送信息,不能实现反向传输
  2. 半双工数据传输
    是一种可以切换方向的单工通信,在同一时间只可以有一方接收或发送信息
  3. 全双工数据传输
    允许数据同时在两个方向上传输

串口通信协议介绍

UART物理层

UART是异步串行全双工通信协议,没有时钟协议

UART数据帧格式

  1. 起始位
    逻辑电平为低电平
  2. 数据位
  3. 校验位
  4. 停止位
  5. 空闲位

UART传输速率

在需要保证稳定传输的场合,通常采用较低的波特率

UART通信实例

UART电路原理图

在这里插入图片描述

串口中断

串口中断请求标志位

串口中断允许控制位

串口中断允许控制位决定CPU能否响应中断

串口中断优先级控制位

注意:IPH寄存器不可以进行位寻址操作

串口工作模式

工作模式0

工作模式1

工作模式2

工作模式3

实例与代码解析

  1. 包含头文件
#include <reg52.h>
  1. 编写串口配置函数
static void InitUART()
{
    SCON = 0x50; // 设置串口为工作模式1,并打开接受允许
    TMOD= 0x20; // 设置定时器1为工作模式2(8位自动重装载定时器)
    PCON = 0x80; // 设置波特率加倍
    TL1 = 0xF3; // 设置定时器1计数初值,波特率为4800
    TH1 = TL1; // 设置定时器1重装载值,等于计数初值
    TR1 = 1; // 打开定时器1
}
  1. 编写中断配置函数
static void InitInterrupt()
{
    ES = 1; // 打开串口接收中断允许
    EA = 1; // 打开总中断允许
}
  1. 编写主函数
void main()
{
    InitInterrupt(); // 初始化中断
    InitUART(); // 初始化串口
    while (1)
    {
        
    }
}
  1. 编写中断服务函数
void UART_Handler() interrupt 4
{
    static unsigned char s_iBuffer; // 定义缓冲变量
    s_iBuffer = SBUF; // 将数据从寄存器中取出
    RI = 0; // 清除接收中断标志位
    
    SBUF = s_iBuffer; // 将数据放入寄存器
    while (!TI) // 等待数据发送完成
    {
        
    }
    TI = 0; // 清除发送中断请求标志位
}

相关推荐

  1. 51单片机——串口通信编程

    2024-04-08 07:58:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 07:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 07:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 07:58:02       82 阅读
  4. Python语言-面向对象

    2024-04-08 07:58:02       91 阅读

热门阅读

  1. LeetCode热题Hot100 - 三数之和

    2024-04-08 07:58:02       32 阅读
  2. xss基础

    xss基础

    2024-04-08 07:58:02      33 阅读
  3. linux基础

    2024-04-08 07:58:02       28 阅读
  4. Docker【1】:Docker制作Oracle19C镜像

    2024-04-08 07:58:02       36 阅读
  5. nginx-rtmp直播监控与管理

    2024-04-08 07:58:02       31 阅读
  6. Gumbel Softmax

    2024-04-08 07:58:02       35 阅读
  7. 【恩智浦FRDM-MCX947开箱实践指南1】

    2024-04-08 07:58:02       36 阅读
  8. 迁移学习和微调

    2024-04-08 07:58:02       33 阅读
  9. Python初级笔记4 排序

    2024-04-08 07:58:02       36 阅读
  10. go | chan 并发传输或者设置chan缓存|死锁

    2024-04-08 07:58:02       40 阅读
  11. Elasticsearch 如何实现 master 选举

    2024-04-08 07:58:02       38 阅读
  12. 柒拾贰- tushare 模拟策略交易 (三)

    2024-04-08 07:58:02       33 阅读