【STC89C51单片机】串口通信

【STC89C51单片机】串口通信

    • 串口简介
      • 1. 串口接线方式
      • 2. 通信过程
    • 相关寄存器
      • 1. SBUF(Serial Buffer Register)
      • 2. SCON(Serial Control Register)
      • 3. PCON(Power Control Register)
      • 4. TCON(Timer Control Register)
      • 5. 串口波特率
    • 代码示例
      • 发送数据:
      • 接收数据
      • 相关寄存器配置**
      • 完整代码

串口简介

STC89C51RC/RD+系列单片机内部集成有一个功能很强的全双工串行通信口,与传统8051单片机的串口完全兼容。设有2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,,因而两个缓冲器可以共用一个地址码(99H)。两个缓冲器统称串行通信特殊功能存器SBUF

1. 串口接线方式

在这里插入图片描述

2. 通信过程

输入/输出数据缓冲器都叫做SBUF, 都用99H地址码,但是是两个独立的8位寄存器
代码体现为: 想要接收数据 char data = SBUF 想要发送数据 SBUF = data
UART是异步串行接口,通信双方使用时钟不同,因为双方硬件配置不同,但是需要约定通信速度,叫做波特率

在这里插入图片描述

相关寄存器

1. SBUF(Serial Buffer Register)

发送数据:写数据到SBUF,数据会从TXD引脚发送出去。
接收数据:当接收到的数据存储在SBUF,可以从SBUF读取数据。

2. SCON(Serial Control Register)

SCON寄存器用于控制串口的工作方式和状态。其位定义如下:

  • SM0, SM1:选择串口的工作模式(Mode)
  • 0 0:模式0,移位寄存器方式,波特率为定时器频率/12
  • 0 1:模式1,8位UART,波特率可变
  • 1 0:模式2,9位UART,波特率为定时器频率/32或/64
  • 1 1:模式3,9位UART,波特率可变
  • REN:允许接收(Receiver Enable)
  • TB8:在模式2或3中使用的第9位发送数据
  • RB8:在模式2或3中使用的第9位接收数据
  • TI:发送中断标志(Transmit Interrupt Flag)
  • RI:接收中断标志(Receive Interrupt Flag)

3. PCON(Power Control Register)

PCON寄存器的SMOD位用于控制串口波特率加倍:

  • SMOD:当设为1时,串口波特率加倍。

4. TCON(Timer Control Register)

TCON寄存器中的位用于控制定时器/计数器的启动和中断。它们在串口通信中的作用主要是用于定时器的控制。

5. 串口波特率

波特率(Baud Rate)是串行通信中的一个重要参数,它定义了每秒钟传输的比特数。80C51的串口波特率可以通过定时器1的溢出率来控制。
波特率公式:

模式1和模式3

波特率 = 2 S M O D 32 × ( 晶振频率 12 × ( 256 − T H 1 ) ) \text{波特率}=\frac{2^{SMOD}}{32}\times\left(\frac{\text{晶振频率}}{12\times(256-TH1)}\right) 波特率=322SMOD×(12×(256TH1)晶振频率)
其中,SMOD为PCON寄存器中的波特率加倍位,TH1为定时器1的高字节。

代码示例

发送数据:

void serial_send(char data) {SBUF = data;   // 将数据写入SBUF寄存器while (!TI);   // 等待发送完成TI = 0;        // 清除发送中断标志
}

接收数据

char serial_receive() {while (!RI);   // 等待接收完成RI = 0;        // 清除接收中断标志return SBUF;   // 读取接收的数据
}

相关寄存器配置**


void UartInit(void)     
{//9600bps@11.0592MHzAUXR = 0x01;SCON = 0x50; //配置串口工作方式1,REN使能接收TMOD &= 0x0F;TMOD |= 0x20;//定时器1工作方式位8位自动重装  TH1 = 0xFD;TL1 = 0xFD;//9600波特率的初值TR1 = 1;//启动定时器 EA = 1;//开启总中断ES = 1;//开启串口中断
}

完整代码

#include "reg52.h"
sfr AUXR = 0x8e;void UartInit(void)     
{//9600bps@11.0592MHzAUXR = 0x01;SCON = 0x50; //配置串口工作方式1,REN使能接收TMOD &= 0x0F;TMOD |= 0x20;//定时器1工作方式位8位自动重装  TH1 = 0xFD;TL1 = 0xFD;//9600波特率的初值TR1 = 1;//启动定时器 EA = 1;//开启总中断ES = 1;//开启串口中断
}
//发送数据
void serial_send(char data_mes) {SBUF = data_mes;   // 将数据写入SBUF寄存器while (!TI);   // 等待发送完成TI = 0;        // 清除发送中断标志
}
//接收数据
char serial_receive() {while (!RI);   // 等待接收完成RI = 0;        // 清除接收中断标志return SBUF;   // 读取接收的数据
}void serial_string(char* p) {while(*p != '\0'){serial_send(*p);p++;}}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;i = 43;j = 6;k = 203;do{do{while (--k);} while (--j);} while (--i);
}void main()
{UartInit();while(1){Delay1000ms();serial_string("hello word\r\n");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录些Redis题集(4)

Redis 通讯协议(RESP) Redis 通讯协议(Redis Serialization Protocol,RESP)是 Redis 服务端与客户端之间进行通信的协议。它是一种二进制安全的文本协议,设计简洁且易于实现。RESP 主要用于支持客户端和服务器之间的请求响应交互…

第 8 章 虚拟文件系统(2)

目录 8.3 VFS结构 8.3.1 结构概观 8.3.2 inode 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 8.3 VFS结构 8.3.1 结构概观 VFS组成部分: 1. 文件。 2. 文件系统。 1. 文件的表示 inode:包含文件信息及数据存储位置。 上…

001、Mac系统上Stable Diffusion WebUI环境搭建

一、目标 如标题所述,在苹果电脑(Mac)上搭建一套Stable Diffusion本地服务,以实现本地AI生图目的。 二、安装步骤 1、准备源码【等价于准备软件】 # 安装一系列工具库,包括cmake,protobuf,rust,python3.10,git,wge…

Nginx、LNMP万字详解

目录 Nginx 特点 Nginx安装 添加Nginx服务 Nginx配置文件 全局配置 HTTP配置 状态统计页面 Nginx访问控制 授权用户 授权IP 虚拟主机 基于域名 测试 基于IP 测试 基于端口 测试 LNAMP 解析方式 LNMP转发php-fpm解析 Nginx代理LAMP解析 LNMP部署示例 实…

linux之mysql安装和使用

数据库之Mysql 一、数据库介绍 1、什么是数据库 数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来对数据进行组织和存储的,可以通过数据库提供的多种方法来管理其中的数据。 2、数据库的种类 最常用的…

微分段Microsegmentation简介

目录 微分段Microsegmentation简介什么是微分段?微分段的防范措施微分段的防护层级 基于网络的微分段微分段基本工作机制微分段的角色VxLAN的额外字段 业务链分组与传输策略场景1:三层报文本地转发场景场景2:三层报文跨设备转发场景 微分段的…

中国贸易外经统计年鉴(2006-2023年)

数据年限:2006-2023年全 数据格式:pdf、excel、caj 数据内容:《中国贸易外经统计年鉴》是一部反映中国国内贸易、对外经济贸易和旅游业发展情况的资料性年刊。收录了 中国国内消费品市场、批发和零售业、住宿和餐饮业、国际收支、对外贸易、利…

具有I2S输出的多模数字麦克风ICS-43434咪头LR引脚接地或电源WS接LRCLK

外观和丝印 ICS-43434麦克风3.50 mm x 2.65 mm,丝印为434(图片不好拍,隐约可见434) 一般描述 ICS-43434 是一款数字 IS 输出底部收音孔麦克风。完整的 ICS-43434 解决方案包括 MEMS 传感器、信号调理、模数转换器、抽取和抗混叠滤…

在mybatis-plus中关于@insert注解自定义批处理sql导致其雪花算法失效而无法自动生成id的解决方法

受到这位作者的启发 > 原文在点这里 为了自己实现批量插入&#xff0c;我在mapper层使用insert注解写了一段自定义sql //自定义的批量插入方法 Insert("<script>" "insert into rpt_material_hour(id,sample_time,rounding_time,cur_month,machine_no…

Elasticsearch 批量更新

Elasticsearch 批量更新 准备条件查询数据批量更新 准备条件 以下查询操作都基于索引crm_flow_info来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch批量更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查询指定shif…

视频号矩阵系统,AI自动生成文案,实现批量上传视频和定时发布

在数字化浪潮席卷全球的今天&#xff0c;视频内容已成为信息传播的重要载体。然而&#xff0c;对于众多自媒体创作者和企业而言&#xff0c;如何高效、精准地发布视频内容&#xff0c;依然是一个不小的挑战。幸运的是&#xff0c;随着技术的不断进步&#xff0c;视频号矩阵系统…

Kafka消息队列python开发环境搭建

目录 引言 Kafka 的核心概念和组件 Kafka 的主要特性 使用场景 申请云服务器 安装docker及docker-compose VSCODE配置 开发环境搭建 搭建Kafka的python编程环境 Kafka的python编程示例 引言 Apache Kafka 是一个分布式流处理平台&#xff0c;由 LinkedIn 开发并在 2…

SpringBoot整合阿里云RocketMQ对接,商业版

1.需要阿里云开通商业版RocketMQ 普通消息新建普通主题,普通组,延迟消息新建延迟消息主题,延迟消息组 2.结构目录 3.引入依赖 <!--阿里云RocketMq整合--><dependency><groupId>com.aliyun.openservices</groupId><artifactId>ons-client</…

Qt类 | QLabel类详解

文章目录 一、QLabel类介绍二、Properties&#xff08;属性&#xff09;三、Public Functions&#xff08;公共函数&#xff09;1.构造函数2.alignment与setAlignment函数 -- 标签内容的对齐方式3.buddy与setBuddy函数 -- QLabel关联的伙伴控件4.hasScaledContents与setScaledC…

基于YOLOv8深度学习的水果智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、卷积神经网络

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

C#字符串基本操作

1、代码 //1、创建字符串&#xff08;获取长度&#xff09;string str "Hello, World!";Console.WriteLine($"string:{str},length:{str.Length}");//2、字符串连接string str1 "Hello, ";string str2 "World!";Console.WriteLine…

在 Windows 11/10/8 上恢复误删除文件的最佳方法

如果您刚刚在计算机上重新安装了 Windows 操作系统&#xff0c;结果硬盘上的所有文件都消失了&#xff0c;有没有办法从 Windows 11/10 中恢复误删除的文件&#xff1f; 许多因素都可能导致 PC 上的文件被删除。除了重新安装操作系统外&#xff0c;其他常见原因还包括意外删除…

Vue.js 生命周期详解:从创建到销毁的全过程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

STM32 IAP 需要关注的一些事

1、首先要知道STM32的程序是如何分布在FLASH中的。 2、升级的时候涉及到两个程序&#xff0c;一个是bootloader&#xff0c;一个是user程序&#xff0c;这两个程序的功能分别的什么作用的&#xff1f; 3、编译的固件是怎么分布的&#xff1f;通过那个配置文件去指导编译器去排布…