51单片机入门_江协科技_19~20_OB记录的笔记
19. 串口通讯
-
19.1. 串口介绍:
•串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。
•单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
•51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。
-
19.2. 串口硬件电路
•简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
•TXD与RXD要交叉连接,TXD Transmit Exchange Data;RXD Receive Exchange Data
•当只需单向的数据传输时,可以直接一根通信线
•当电平标准不一致时,需要加电平转换芯片
-
19.3. 电平标准
•电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
•TTL电平:+5V表示1,0V表示0
•RS232电平:-3-15V表示1,+3+15V表示0
•RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号) -
19.4. 接口及引脚定义
-
19.5. 常见通讯接口比较:
-
相关的术语有:
•全双工:通信双方可以在同一时刻互相传输数据
•半双工:通信双方可以互相传输数据,但必须分时复用一根数据线
•单工:通信只能有一方发送到另一方,不能反向传输
•异步:通信双方各自约定通信速率
•同步:通信双方靠一根时钟线来约定通信速率
•总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流) -
19.6. 51单片机的UART
•STC89C52有1个UART
•STC89C52的UART有四种工作模式:
模式0:同步移位寄存器
模式1:8位UART,波特率可变(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可变
-
19.7. 串口参数及时序图
•波特率:串口通信的速率(发送和接收各数据位的间隔时间)
•检验位:用于数据验证,奇校验,偶数个1的时,校验位补1,奇数个1的时候,校验位补0;
•停止位:用于数据帧间隔
-
19.8. 串口模式图
•SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器
-
19.9. 串口和中断系统
-
19.10. 串口相关寄存器
-
19.11. 数据显示模式
•HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
•文本模式/字符模式:以原始数据编码后的形式显示
20. 串口向电脑发送数据&电脑通过串口控制LED
-
20.1. STC89C52手册中的串口介绍如下:
-
STC89C52系列单片机内部集成一个功能很全双工串行通信口,与传统8051单片机的串口完全兼容。设2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码(99H)。两个缓冲器统称串行通信特殊功能寄存器SBUF。
-
串行通信设有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。波特率由内部定时器/计数器产生,用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。
-
STC89C52系列单片机串行口对应的硬件部分对应的管脚是P3.0/RxD和P3.1/TxD。
-
STC89C52系列单片机的串行通信口,除用于数据通信外,还可方便地构成一个或多个并
行I/O口,或作串—并转换,或用于扩展串行外设等。
-
20.2. 串口通讯程序初始化(新建工程8-1 串口向电脑发送数据),需要增加之前的模块程序“delay_xms.h”
-
20.3. 串口相关寄存器的配置:
-
SM0=0, SM1=1, 适配当前学习环境
-
SM2=0;
-
REN=1单片机接受数据,测试程序REN=0先给0用于测试;
-
TB8=0, RB8=0;
-
TI=0必须用软件复位;标志位,发送后必须软件复位置0;
-
RI=0;
-
综上SCON=0100 0000B=0x40;
-
SBUF初始化无需配置;
-
PCON初始化配置借助STC-ISP进行波特率的配置;
-
除此以外还需要配置定时器,这里配置的是定时器1,因为定时器配置中涉及波特率计算,作者借助STC-ISP的工具直接进行配置,配置中的各项参数设置如图:
-
初始化函数如下
void Uart_Init(void) //4800bps@12.000MHz
{PCON |= 0x80; //使能波特率倍速位SMOD,加倍波特率减少误差SCON = 0x50; //8位数据,可变波特率//AUXR &= 0xBF; //定时器时钟12T模式//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TMOD |= 0x20; //设置定时器模式TL1 = 0xF3; //设置定时初始值TH1 = 0xF3; //设置定时重载值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1
}
- 20.4. 测试发送数据0x66;
#include <REGX52.h>
#include "delay_xms.h"void Uart_Init(void) //4800bps@12.000MHz
{PCON |= 0x80; //使能波特率倍速位SMOD,加倍波特率减少误差SCON = 0x50; //8位数据,可变波特率//AUXR &= 0xBF; //定时器时钟12T模式//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TMOD |= 0x20; //设置定时器模式TL1 = 0xF3; //设置定时初始值TH1 = 0xF3; //设置定时重载值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1
}void Uart_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);//判断是否发送TI=0; //发送后置0
}void main()
{Uart_Init();Uart_SendByte(0x66);while(1){}}
-
Proteus中测试验证无误;
-
STC-ISP中显示结果无误
-
20.5. 一个问题,如果程序稍微修改一下,重复快速发送数据0x66,有概率实际开发板接收数据为96(作者视频中演示),需要在发送语句后面加入1ms延时,以减少出错概率,main函数修改为如下:
void main()
{Uart_Init();while(1){Uart_SendByte(0x66);//重复发送数据66delay_xms(1);//1ms的延时用于防止发送数据错误}}
- 20.6. 测试每隔1s发送一个数字,数字累加,程序如下:
#include <REGX52.h>
#include "delay_xms.h"
unsigned char sec;
void Uart_Init(void) //4800bps@12.000MHz
{PCON |= 0x80; //使能波特率倍速位SMOD,加倍波特率减少误差SCON = 0x50; //8位数据,可变波特率//AUXR &= 0xBF; //定时器时钟12T模式//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TMOD |= 0x20; //设置定时器模式TL1 = 0xF3; //设置定时初始值TH1 = 0xF3; //设置定时重载值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1
}void Uart_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);//判断是否发送TI=0; //发送后置0
}void main()
{Uart_Init();while(1){Uart_SendByte(sec);sec++;delay_xms(1000);}}
模拟仿真结果如下:
- 20.7. 示例程序STC-ISP中借用串口助手发送数据,开发板接受到相关的数据后在P2的8个LED灯中显示LED灯的相应状态:
#include <REGX52.h>
#include "delay_xms.h"
#include "Uart.h"void main()
{Uart_Init();while(1){}}void Uart_Routine() interrupt 4 //函数名任意,主要是interrupt 4定义中断
{if(RI==1) //判断接收数据中断P2=~SBUF; //接收到的数据取反后赋值P2口RI=0; //RI置0,等待下次接收数据判断}
- 模块化程序的Uart.c程序如下:
#include <REGX52.h>
/*** @brief 串口初始化4800bps@12.000MHz* @param 无* @retval 无*/void Uart_Init(void) //4800bps@12.000MHz
{PCON |= 0x80; //使能波特率倍速位SMOD,加倍波特率减少误差SCON = 0x50; //8位数据,可变波特率,可接收数据//AUXR &= 0xBF; //定时器时钟12T模式//AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TMOD |= 0x20; //设置定时器模式TL1 = 0xF3; //设置定时初始值TH1 = 0xF3; //设置定时重载值ET1 = 0; //禁止定时器1中断TR1 = 1; //启动定时器1EA=1; //启动所有中断ES=1; //启动串口中断
}/*** @brief 串口发送一个字节数据* @param Byte 要发送的一个字节数据* @retval 无*/void Uart_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);//判断是否发送TI=0; //发送后置0
}
- 模块化程序的Uart.h如下:
#ifndef _UART_H_
#define _UART_H_ void Uart_Init();
void Uart_SendByte(unsigned char Byte);#endif
- STC-ISP中发送数字11(0001 0001 B)有2个灯亮起,测试没有问题;;
相关文章:
51单片机入门_江协科技_19~20_OB记录的笔记
19. 串口通讯 19.1. 串口介绍: •串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 •单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的…...
基于k8s的高性能综合web服务器搭建
目录 基于k8s的高性能综合web服务器搭建 项目描述: 项目规划图: 项目环境: k8s, docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构,k8s单master的集群环境&…...
Folder Icons for Mac v1.8 激活版文件夹个性化图标修改软件
Folder Icons for Mac是一款Mac OS平台上的文件夹图标修改软件,同时也是一款非常有意思的系统美化软件。这款软件的主要功能是可以将Mac的默认文件夹图标更改为非常漂亮有趣的个性化图标。 软件下载:Folder Icons for Mac v1.8 激活版 以下是这款软件的一…...
Gitee上传私有仓库
个人记录 Gitee创建账号 以KS进销存系统为例,下载到本地电脑解压。 新建私有仓库 仓库名称:ks-vue3,选择‘私有’ 本地配置 下载安装git配置git 第一次配置可以在本地目录右键【Open Git Bash here】输入【Git 全局设置】再输入【创…...
HTMLCSSJS
HTML基本结构 <html><head><title>标题</title></head><body>页面内容</body> </html> html是一棵DOM树, html是根标签, head和body是兄弟标签, body包括内容相关, head包含对内容的编写相关, title 与标题有关.类似html这种…...
第14章 数据结构与集合源码
一 数据结构剖析 我们举一个形象的例子来理解数据结构的作用: 战场:程序运行所需的软件、硬件环境 战术和策略:数据结构 敌人:项目或模块的功能需求 指挥官:编写程序的程序员 士兵和装备:一行一行的代码 …...
分享react+three.js展示温湿度采集终端
前言 气象站将采集到的相关气象数据通过GPRS/3G/4G无线网络发送到气象站监测中心,摆脱了地理空间的限制。 前端:气象站主机将采集好的气象数据存储到本地,通过RS485等线路与GPRS/3G/4G无线设备相连。 通信:GPRS/3G/4G无线设备通…...
易宝OA ExecuteSqlForDataSet SQL注入漏洞复现
0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA ExecuteSqlForDataSet接口处存在SQL注入漏洞,未经身份认证的攻击者可以通过…...
C++语言学习(二)——⭐缺省参数、函数重载、引用
1.⭐缺省参数 (1)缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…...
qt通过setProperty设置样式表笔记
在一个pushbutton里面嵌套两个label即可,左侧放置图片label,右侧放置文字label,就如上图所示; 但是这时的hover,press的伪状态是没有办法“传递”给里面的控件的,对btn的伪状态样式表的设置,是不…...
Sora文本生成视频(附免费的专属提示词)
sora-时髦女郎 bike_1 Sara-潮汐波浪 Sora是一个由OpenAI出品的文本生成视频工具,已官方发布了生成视频的样式,视频的提示词是:A时髦的女人走在充满温暖霓虹灯的东京街道上动画城市标牌。她穿着黑色皮夹克、红色长裙和黑色靴子,拎着黑色钱包。她穿着太阳镜和红色唇膏。她走…...
Flask Python:数据库多条件查询,flask中模型关联
前言 在上一篇Flask Python:模糊查询filter和filter_by,数据库多条件查询中,已经分享了几种常用的数据库操作,这次就来看看模型的关联关系是怎么定义的,先说基础的关联哈。在分享之前,先分享官方文档,点击查看 从文档…...
Spring Security 实现后台切换用户
Spring Security version 后端代码: /*** author Jerry* date 2024-03-28 17:47* spring security 切换账号*/RestController RequiredArgsConstructor RequestMapping("api/admin") public class AccountSwitchController {private final UserDetailsSe…...
《QT实用小工具·一》电池电量组件
1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件,包含如下功能: 可设置电池电量,动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…...
基于springboot实现墙绘产品展示交易平台管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现墙绘产品展示交易平台管理系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本墙绘产品展示交易平台就是在这样的大环境下诞生&…...
主流公链文章整理
主流公链文章整理 分类文章地址🍉BTC什么是比特币🥭BTCBTC网络是如何运行的🍑BTC一文搞懂BTC私钥,公钥,地址🥕ETH什么是以太坊🌶️基础知识BTC网络 vs ETH网络🥜CosmosCosmos介绍&a…...
css3之3D转换transform
css3之3D转换 一.特点二.坐标系三.3D移动(translate3d)1.概念2.透视(perpective)(近大远小)(写在父盒子上) 四.3D旋转(rotate3d)1.概念2.左手准则3.呈现(transfrom-style)(写父级盒子…...
SpringBoot -- 外部化配置
我们如果要对普通程序的jar包更改配置,那么我们需要对jar包解压,并在其中的配置文件中更改配置参数,然后再打包并重新运行。可以看到过程比较繁琐,SpringBoot也注意到了这个问题,其可以通过外部配置文件更新配置。 我…...
优酷动漫顶梁柱!神话大乱炖的修仙番为何火爆?
优酷动漫新晋顶梁柱,实时超160万在追的修仙番长啥样? 由优酷动漫联合玄机科技打造的《师兄啊师兄》俨然成为了国漫界一颗璀璨的新星。自去年开播以来热度口碑双丰收,今年在播的第二季人气更是节节攀升,稳坐优酷动漫榜第一把交椅。…...
每日一题:C语言经典例题之判断实数相等
题目: 从键盘输入两个正实数,位数不超过200,试判断这两个实数是否完全相等。注意输入的实数整数部分可能有前导0,小数部分可能有末尾0。 输入 输入两个正实数a和b。 输出 如果两个实数相等,则输出Yes,…...
【算法每日一练]-数论(保姆级教程 篇1 埃氏筛,欧拉筛)
目录 保证给你讲透讲懂 第一种:埃氏筛法 第二种:欧拉筛法 题目:质数率 题目:不喜欢的数 思路: 问题:1~n 中筛选出所有素数(质数) 有两种经典的时间复杂度较低的筛法࿰…...
【剑指offr--C/C++】JZ59 滑动窗口的最大值
一、题目 二、思路及代码 暴力解法是依次往后滑动一位,然后比较窗口内的值。 我这里考虑:窗口每次往后移动一位,那么如果当前窗口的最大值max在窗口内部,那么再滑动到下一个窗口的时候,窗口内只有最新进来的一个元素没…...
RabbitMQ Tutorial
参考API : Overview (RabbitMQ Java Client 5.20.0 API) 参考文档: RabbitMQ: One broker to queue them all | RabbitMQ 目录 结构 Hello World consumer producer 创建连接API解析 创建连接工厂 生产者生产消息 消费者消费消息 队列声明 工作队列Work Queues 公平…...
如何对Webpack进行优化
目录 1.优化-提取css代码 1.1. 插件 mini-css-extract-plugin 1.2. 步骤: 1.3. 注意 1.4. 好处 1.5. 练习 2. 优化-css代码提取后压缩 2.1. 问题引入 2.2. 解决 2.3. 步骤 3. Webpack打包less代码 3.1. 加载器 less-loader 3.2. 步骤 3.3. 注意…...
nut-ui中的menu 菜单组件的二次封装
这个菜单组件 一般可以直接用到项目里 如果复用性不强的话 直接使用 但是有一个问题 如果很多地方都需要用到这个组件 我们可以把这个组件二次封装一下 <template><div class"cinema-search-filter-component"><nut-menu><template #icon>&…...
python笔记(11)序列
Python中的“序列”是一个广义术语,用于描述一种特定的数据结构,它具备以下共同特征: 有序性:序列中的元素按照特定的顺序排列,每个元素在序列中都有一个确定的位置,即索引。 索引访问:通过索引…...
Rust egui(4) 增加自己的tab页面
如下图,增加一个Sins也面,里面添加一个配置组为Sin Paraemters,里面包含一个nums的参数,范围是1-1024,根据nums的数量,在Panel中画sin函数的line。 demo见:https://crazyskady.github.io/index.…...
小组分享第二部分:Jsoup
1.Jsoup是什么: 是HTML的解析器,可以解析URL地址,HTML的文本内容,可以使用DOM,CSS以及类似Jquery的操作方法来操作数据 2.Jsoup的作用 1.通过URL或者文件或者字符串获取到HTML页面并解析 2.使用DOM或CSS等操作来对数据进行操作 3.可以操作HT…...
C#(winform) 调用MATLAB函数
测试环境 VisualStudio2022 / .NET Framework 4.7.2 Matlab2021b 参考:C# Matlab 相互调用 Matlab 1、编写Matlab函数 可以没有任何参数单纯定义matlab处理的函数,输出的数据都存在TXT中用以后期读取数据 function [result,m,n] TEST(list) % 计算…...
Kubernetes探索-Pod面试(补充)
针对上篇文章"kubernetes探索-Pod面试"做一点点补充... 1. 简述Pod的删除流程 1) kube-apiserver接收到用户的删除指令,默认等待30s(优雅退出时间),随后认为pod已死亡,将其标记为Terminating状态; 2) kubelet监控到pod…...
山西住房和城乡建设厅网站/河南seo和网络推广
以下有三个问题: 1、那些内存需要回收? java堆中创建的对象需要回收,以及方法区中的类需要卸载以及常量池需要回收。 2、什么时候回收? JVM通过可达性算法分析,如果一个对象到GC roots对象之间没有链,则该对象就会…...
在床上做很黄很暴力网站/搜狗推广效果好吗
a frustratingly easy approach for joint entity and relation extraction 文章链接:https://arxiv.org/pdf/2010.12812.pdf 时间:2020.10.24挂到arxiv上 作者:陈丹琦 简介:做关系抽取的,用pipeline的方式&#…...
十堰哪里有做网站的/seo推广小分享
理解 SVG 中的 Viewport 和 ViewBox - 實做縮放(zoom)和拖曳(drag)效果 本文章同步刊載於 PJCHENder 前端網頁資源站 不同於以往將 SVG 視為一張圖案(ICON 或 LOGO)的概念,在這篇文章中…...
密云住房和城乡建设部网站首页/培训机构哪家好
这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)【问题描述】编写程序,打开一篇英文文章(存在当前目录下的文件in.txt中),为该文章生成词汇表(存到当前目录下的另一个文…...
网站不能访问的原因/seo专业培训课程
if(file_exists($log)){//判断$log是否存在,如果不存在则创建$logtouch($log);//touch是快速创建一个文件return $log; } 转载于:https://www.cnblogs.com/forphp/p/3504438.html...
基金会网站建设方案/cps广告是什么意思
最近整理了一份Java学习路线,不过是针对于学习Android的学员写的,当然这份路线图上的知识点肯定有不足的地方,希望大家多提提意见。随着这份学习路线图的整理,以后也会陆陆续续的把每个知识点的学习教程发送到网上~基于Android的J…...