【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://xiahunao.cn/news/3247627.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

北京青蓝智慧科技CCRC-DCO数据合规官:人工智能遭遇寒冬?

人工智能技术是否真正迈入了新纪元? 历史上,人工智能已经经历了多次起伏,每次都伴随着寒冷的冬天。 然而,为什么这一次的技术变革被看作是人类社会重大转型的关键节点呢?在CES 2024上,吴恩达和李飞飞预言了…

【HZHY-AI300G智能盒试用连载体验】RTC示例程序测试

本文首发于:【   】【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) HZHY-AI300G智能盒默认的系统是Ubuntu,这样非常方便使用,接上USB键盘和…

开发一个自己的chrom插件

开发一个自己的chrom插件 一、创建一个文件夹 二、配置文件manifest.json 创建名字为:manifest.json的配置文件,模板如下: {"manifest_version": 3,"name": "Hello World Extension","version": …

如何防范场外个股期权的交易风险?

场外个股期权交易,作为金融衍生品市场的重要组成部分,为投资者提供了更为灵活和多样化的投资策略。然而,其高杠杆、高风险特性也使得投资者在追求高收益的同时,面临着较大的交易风险。为了有效防范这些风险,投资者需要…

生成式之CycleGAN图像风格迁移互换

模型介绍 CycleGAN是一种循环对抗生成网络,用于实现在没有配对示例的情况下学习将图像从一个域转换到另一个域的方法。它的重要应用领域是域迁移,即图像风格迁移。与之前的模型不同,CycleGAN不需要训练数据成对出现,因此可以实现…

沙尘传输模拟教程(基于wrf-chem)

沙尘传输模拟教程(基于wrf-chem) 文章目录 沙尘传输模拟教程(基于wrf-chem)简介实验目的wrf-chem简介 软件准备wps、wrf-chem安装conda安装ncl安装ncap安装 数据准备气象数据准备下垫面数据准备 WPS数据预处理namelist.wps的设置geogrid.exe下垫面处理ungrib.exe气象数据预处理…

AI、ML、DL 和 DS 之间的区别

人工智能 数据分析 数据科学 深度学习 机器学习 神经网络 在本文中,我们将了解 AI(人工智能)、ML(机器学习)、DL(深度学习)和 DS(数据科学)之间的区别。这些术语经常互换…

K8S 上部署 Emqx

文章目录 安装方式一:快速部署安装方式二:定制化部署1. 使用 Pod 直接部署 EMQX Broker2. 使用 Deoloyment 部署 Pod3. 使用 Services 公开 EMQX Broker Pod 服务4. 通过 kubernetes 自动集群 EMQX MQTT 服务器5. 修改 EMQX Broker 的配置6. 赋予 Pod 访…

第11章 规划过程组(11.5规划资源管理)

第11章 规划过程组(四)11.4规划质量管理,11.5规划资源管理在第三版教材第414~419页; 图片文字音频方式 视频38 第一个知识点:主要输出 1、质量管理计划 描述如何实施适用的政策、程序和指南以实现质量目标&#xff…

【Socket套接字编程】(实现TCP和UDP的通信)

🎇🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友…

数据分析01——系统认识数据分析

1.数据分析的全貌 1.1观测 1.1.1 观察 (1)采集数据 a.采集数据:解析系统日志 当你在看视频的时候———就会产生日志———解析日志———得到数据 b.采集数据:埋点获取新数据(自定义记录新的信息) 日志…

数据建模标准-关系建模

数据模型定义:DAMA数据治理体系中将数据模型定义为一种文档形式,数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介; 作用:记录数据需求和建模过程中产生的数据…

应用最优化方法及MATLAB实现——第4章代码实现

一、概述 之前对这本书的第三章进行了代码实现,这篇博客是对这本书第4章相关代码进行实现,部分内容安装书中代码无法实现相应功能,MATLAB会报错,对其进行一定程度的更改后,可以正常运行,与书中所给示例运行…

亲测--linux下安装ffmpeg最新版本---详细教程

下载地址 Download FFmpeg 下载最新的https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.xz 上传到服务器 解压 tar xvf ffmpeg-7.0.1.tar.xz 编译 cd ffmpeg-7.0.1 ./configure --prefix=/usr/local/ffmpeg make && make install 报错: 解决:在后面加 跳过检测…

Template_C++

C模板 C提供了function template. function template:实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用的函数就称为函数模版。 是不是可以这样理解,函数模版就是给了一种功能&…

线程的中断和同步问题

1、自动终断【完成】:一个线程完成执行后(即run方法执行完毕),不能再次运行 。 2、手动中断: stop( ) —— 已过时,基本不用。(不安全,就像是突然停电) interrupt( ) …

从0到1搭建数据中台(4):neo4j初识及安装使用

在数据中台中,neo4j作为图数据库,可以用于数据血缘关系的存储 图数据库的其他用于主要用于知识图谱,人物关系的搭建,描述实体,关系,以及实体属性 安装 在官网 https://neo4j.com/ 下载安装包 neo4j-co…

系统架构师考点--面向对象开发

大家好。今天再来总结一下面向对象的相关考点。面向对象技术。这部分在上午场客观题一般占3-5分左右。下午的案例题和论文题也可能有所涉及。 一、面向对象开发 (1)对象:由数据及其操作所构成的封装体,是系统中用来描述客观事务的个实体,是…

【算法/天梯赛训练】天梯赛模拟题集

L1-009 N个数求和 #include <iostream> #include <algorithm>using namespace std;typedef long long ll; const int N 105;typedef struct node {ll x, y; }node; node a[N];ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a; }int main() {int n;cin >>…

Lua基础知识入门

1 基础知识 标识符&#xff1a;标识符的定义和 C语言相同&#xff1a;字母和下划线_ 开头&#xff0c; 下划线_ 大写字母一般是lua保留字&#xff0c; 如_VERSION 全局变量&#xff1a;默认情况下&#xff0c;变量总是认为是全局的&#xff0c;不需要申明&#xff0c;给一个变…