一:原理介绍
一.串口通信
二.接口及引脚定义
2排9针
串口是传输数据的
vga接口是用于传输视频的(电脑和投影连接或与显示屏),传输的是模拟信号,所以画面的分辨率不高
不支持热插拔,所以要用螺丝进行固定保护
补充:
建议Dp1.2和Dp1.4
4k电视 建议买HDMI2.1
过长会出现降速
三.硬件电路
通信需要三根线,TXD,RXD,GND
四.电平标准
TTL(晶体管晶体管逻辑)
单片机使用TTL电平
USB接口,CAN总线接口都使用的是差分传输
前两种十多米距离的数据误差就高了 ,而RS485电平可以传输千米
51单片机是不支持流控制的
五.常见的通信接口的比较
SCL,SCLK是一种时钟线
补充:
同步通信的配合很好,但是需要设置专门的时钟线(这是一个劣势),即使设置了专门的时钟线,可能由于电路传播的不同路径,不同导体,高频远距离还是会导致时钟相位不同,数据传输丢失bit
采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为
帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。在同步传输过程
中,一个字符可以对应5~8位。当然,对同一个传输过程,所有字符对应同样的数位,比如说n位。这样,传输时,按
每n位划分为一个时间片,发送端在一个时间片中发送一个字符,接收端则在一个时间片中接收一个字符。
同步传输时,一个信息帧中包含许多字符,每个信息帧用同步字符作为开始,一般将同步字符和空字符用同一个
代码。接收端当然是应该能识别同步字符的,当检测到有一串数位和同步字符相匹配时,就认为开始一个信息帧,于
是,把此后的数位作为实际传输信息来处理。
版权声明:本文为CSDN博主「yundanfengqing_nuc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yundanfengqing_nuc/article/details/50911590
连续发送两个sync同步字符,告诉接收方要与其进行同步
信号编码当中包括了时钟信号
曼彻斯特编码针对bit丢失,通过不同码元来结合数据信号和时钟信号,每一位中间电平转换(分隔)即表示数据代码,又作为定时信号使用,是一种双相码,接收方可以明显地分辨数据间的分隔,用于(1-10M/s)低速以太网,早期的局域网的使用
差分曼彻斯特编码,数据的表示在于每一位开始处是否有电平转换,有电平转换表示为0,没有电平转换表示为1,每一位中间电平转换只作为定时信号,不表示数据 ,用于令牌环网
异步通信可以提高cpu的效率,不用像同步通信那样时刻接收时钟信号
由于UART不能挂载多个设备,所以没有UART总线的概念
单工(例如:遥控器)
同步是遇到一个上升沿就进行一次采样(格外地加一根线)
六.串口的参数及时序图
一位一位地进行发送(先发低位,再发高位)
校验(排错率不高)
补充:下面进行串口通信的工作原理解释
以发送“A”为例
从左到右依次将数据发送出去
第一位是起始位永远是低电平
最后一位是停止位永远是高电平
发送数据的时候必须要有时间间隔
9600的波特率
发送的时间间隔一定要和波特率完全对应上
对应不上的话会导致接收的数据不准,数据错乱
七.串口模式图
SBUF放在赋值号左边,使用发送寄存器
SBUF放在赋值号右边,使用接收寄存器
补充:
半双工:允许双向传输数据,但是不能同时传输,就是两个可以切换的单工(类似于对讲机,只能有一方讲话)
全双工:允许双向同时传输数据(类似于手机,双方可以同时讲话)
TB8和RB8都是有关第9位数据的处理,所以不管它
二:代码实现
1.配置寄存器
(1)SCON寄存器介绍
serial control串口控制
frame error
使用8位数据传输时,不需要进行帧错误的检测
TI(发送中断标志位):发送完毕后,必须要通过软件(代码)进行置0
RI同理
(2)SBUF初始化时不需要进行配置
(3)IE,IPH,IP
发送不需要开启中断,所以不用进行配置
(4)从机地址SADEN
不需要进行配置
串口向电脑发送数据不需要配置中断,直接使用Delay
串口的发送速率(波特率)是由定时器决定的
由于串口的波特率传输较快,所以需要较16位定时器更精准,故采用双八位自动重装模式
此处波特率加倍是要进行分频,如果不加倍的话时钟会变慢,变慢后就不能匹配,形成比较大的误差
波特率越低,通信越稳定,误差的影响更小
注:
2.代码实现
(1)串口向电脑发送数据
(2)电脑通过发送串口控制LED
接收需要一个中断系统,电脑发送的时间不确定,也不能一直用CPU进行检测
所以要利用中断,当电脑发送数据的时候才将数据取出
a.寄存器配置
开启中断
b.代码实现
子函数+interrupt +中断号整体就变成了中断服务子函数
interrupt+中断号 跟在那个函数后面,那个函数就是中断服务子函数
优化:
由于发送和接收标志位采用同一个中断,所以在中断子函数里面需要对中断源进行判断
注:
定时器和串口中断函数与主函数的耦合性比较大,所以要写成模板
c.波特率的计算
T1溢出率的计算
256-243(F3)=13次
12MHz每隔1us就计数一次,所以溢出率=1/13=0.0769230MHz
0.07692/16=0.00480769MHz=4807.69Hz
误差计算:7.69/4800
d.补充
文本模式:接收到什么就给你显示什么,写下什么就给你发送什么
数据进行传输的时候(即发送数据后)会进行编码
ASCII码表前33位是不可见字符