导图社区 19. 串口通信
串口通信知识的总结,详细的总结了,80X51串行口,单片机与单片机的通信,中断源,代码实验。有需要的小伙伴可以看看哦~
复盘的原则和误区的思维导图,复盘的时候需要不断的问自己问什么,深入挖掘问题深处的原因,不断探究问题的本质,切记停留问题表面,做无效复盘。
这是一篇关于概率论的思维导图,n重伯努利试验:将伯努利试验独立重复进行n次,每次P(A)=P,则A有可能发生0,1,2...n次,A恰好发生k次的概率为?
关于ROS2 二十一讲笔记的思维导图。包括使用本导图技巧、系统架构两个方面的内容阐述,感兴趣的伙伴快收藏起来学习吧,有不足的地方欢迎指正哦。
社区模板帮助中心,点此进入>>
安全教育的重要性
电费水费思维导图
D服务费结算
个人日常活动安排思维导图
西游记主要人物性格分析
17种头脑风暴法
材料的力学性能
如何令自己更快乐
头脑风暴法四个原则
思维导图
19. 串口通信
理解知识
串行通信的基本概念
异步
同步
传输方向
单工
只能一个方向传输
半双工
可以两个方向,但同一时间只能1个
全双工
任意时间都可以多个方向
串行通信接口标准
RS-232C
定义了数据终端设备 与 数据通信设备之间的物理接口标准
功能特性
子主题
错误校验
奇偶校验
不同标准的接口
RS-485接口
两线传输,抗干扰好
1200m
1Mpbs
常用于工业控制
RS-422A接口
RS-232C接口存在的问题
传输距离段、速率低
<几十米, <20Kbps
有电平偏移
抗干扰能力差
过程特性
远程通信连接
近程通信连接
波特率
每秒钟,传送二进制代码 的 位数
单位
位/秒 bps
传输距离于传输速率
传输距离越远,波特率要越小
80X51串行口
结构
SCON
SM2
多机通信控制 位
REN
允许串行接收 位
ppt

想接收时,置?
1
禁止接收数据,置?
0
TB8
RB8
TI
什么意思?
发送中断标志位
怎么使用?
当发送完数据之后,开始发送停止位时 (方式0 的停止位是第九位) 硬件会自动将 TI = 1; 所以需要在中断函数中,手动将TI = 0;
RI
接受中断标志位
当接收完数据,(对于方式0而言,在接受完第8位结束时) 硬件会自动将RI = 1; 所以我们需要在 中断服务函数中,手动将 RI = 0;
PCON
SMOD
波特率倍增位
让波特率提高一倍?
SMOD = 1
波特率正常?
SMOD = 0;
发送方式
方式0(不太用)
方式1
PPT
接收方式
方式2、方式3(不太用)
波特率的计算
定时器想要 8位自动重装
必须要用T1定时器,且为方式2
波特率与定时器的参数
怎么使用串口
初始化
1. 设置定时器1
1. 确定T1的 工作方式
2. 计算T1的初值
3. 启动T1
2. 串行口控制
3. 中断控制
总开关
小开关
单片机与单片机的通信
点对点
1. 硬件连接
多机通信
使用总线型 主从式结构
常采用 RS-485串行标准
中断源
中断号
4
代码实验
目的:用“串口助手”给单片机传输数据,单片机接收到数据之后,再将该数据传输给“串口助手”
代码模块(助记)
配置定时器
1. 选定方式
注意
使用T1的工作方式2
代码
TMOD = 0X20; 因为高四位控制的是T1定时器
2. 给定时器赋初值
计算波特率初值
使用软件计算
因为时8位自动重装在,所以高低两个寄存器的值一样
3.启动开定时器
启动定时器1的代码: TR1 = 1;
确定波特率是否倍增
PCON = 0X80; PCON 寄存器中只有一位“SMON"与串行口功能相关。并且在第7位。
确定串行口控制
串行口使用的传输工作方式 接收/发送控制 以及设置状态标志
 SM0+SM1 = 工作方式的选择(一般选择方式1——对应01)——置01 SM2 = 多机通信控制位(主要用于方式2、3,——对应0)——置0 REN = 允许串行接受位(要接收数据的话,置1,禁止接收数据的话,置0)——置1 TB8 、RB8 = 方式2 、3中,发送和接收数据第九位(用于奇偶校验等其他用途) ——置0 TI 、 RI = 发送/ 接收中断标志位 (使用前必须指令。 在满足条件后(接收/发送完8位数据)硬件会自动置1)——置0 所以 SCON = 0101 0000; 即 SCON = 0X50;
打开中断
打开总开关
EA = 1;
打开小开关
ES = 1;
函数调用
将初始化函数放到main函数中
中断函数
1. 定义接收数据的变量
2. 让SBUF赋给变量
3. 清零RI,等待下一次接收数据
(接收完数据之后,硬件自动将RI置1,标示接收完了,如果不清零的话,硬件就会认为已经接收完了
遇到的问题/写出的bug
1. 传输助手界面发送之后没反应
要找对串口,我用的软件不是视频中说的自动配对
可以用电脑搜索设备管理器,打开后就能直接看到USB对应的是串口几
HEX发送意思是(16进制发送,需要发送两个值入:01)
HEX显示同样如此
2. 将波特率的代码写错了
波特率虽然是SMON位,但是由于所在的PCON寄存器只能进行整体操作。 所以不能写SMON = 1; 只能写 PCON = 0X80;(SMON在第七位)
3. 启动定时器1的代码记错了
TR1