【PIC单片机】-- 串口相关知识

图片来源网络
文章目录

00 写在前面

该系列的文章,源自于担任过PIC单片机课程的助教,主要向学弟们讲解了几节实验课的内容。在此记录上课的一些知识。

本系列文章主要介绍的内容:
实验1–介绍和基本I/O–按钮和LED(学习嵌入式的第一步就是点一个灯,就像学习编程语言的第一步都是写一个“hello world”代码)

实验2–MPLAB+PICkit 3+LCD+I/O(这次主要是介绍液晶显示屏的使用,很多时候我们系统的调试都需要用到,比如做一个测温系统,那我们就可以通过液晶显示屏,显示传感器采集的数值,然后再通过软件来做进一步的处理)

实验3–ADC(这个是模数转化实验,就是之前模数电学习那些知识的一个综合运用)

实验4–串行通信–UART

实验5–串行通信–I2C

实验6–计时器和中断(这一部分也是很重要的知识点,在很多的嵌入式系统中都会用到,比如用单片机再加几个传感器就可以搭出智能车,智能车就会用到计时器、中断这些内容)

01 串口相关知识

串口通信也是一个很重要的基础知识,比如你做一个项目,前面摄像头采集完数据后进行数据处理后,可以将结果同串口通信,将结果发送给单片机。

先看一下原理图,看RC6、RC7两个引脚,这边有TX\RX(这两个是用得最多的功能,也就是咱们今天要学习的异步串行通信接口),后边这个CK\TD(同步串行接口,CK是两个设备的时钟,TD是数据线)
在这里插入图片描述

02 同步通信与异步通信的区别?

同步通信方式
以一串字符为一个传送单位,字符间不加标识位,在一串字符开始用同步字符表示,硬件要求高,通信双方须严格同步。
在这里插入图片描述
同步通信格式:数据以“块”为单位,一个数据块包括同步字符、数据及校验字符CRC。
在这里插入图片描述
通信连线通常采用三线制:SDA(信号线)、SCL(时钟线)、GND(地线)
优点是数据传输速率较高,常用作串行系统总线(内总线),如I2C、SPI、USB等;
缺点是硬件上要求发送时钟和接收时钟保持严格同步。

异步通信方式
以字符为传送单位,用起始位和停止位标识每个字符的开始和结束字符,间隔不固定,只需字符传送时同步。
在这里插入图片描述异步通信格式如下图在这里插入图片描述
(1)没有数据发送时,数据线保持"1"状态。

(2)发送数据时,先发起始位“0”,其后是数据位,异步传送规定低位在前,高位在后

(3)奇偶位紧跟在数据最高位之后,占用一位(也可省去)

(4)数据发送完后,再发一位停止位“1”,表示一帧数据结束,同时为接收下一帧数据做准备。在下一帧的起始位“0”到来之前,都是默认的“1”

通信协议:(1)发送、接收双方的通信速率必须一致。(2)通信双方的数据帧格式必须一致

优点:不需要传送同步脉冲,可靠性高,所需设备简单适合远距离通信,常用作串行通信总线(外总线),如RS232、RS485等

缺点:数据中包含有起始位和停止位以实现同步,从而降低了有效数据的传输速率。

03 异步通信

本次实验我们主要是讲解异步通信;

波特率?起始位?结束位?奇偶校验位?
波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。比如每秒钟可以传输9600个二进制(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600。

起始位:就是第一位

结束位:就是最后一位

奇偶校验位:如果规定为奇校验,就是前面八位数据位中1个的个数如果为奇数,奇偶校验位就写0,如果为偶数,就写1;就是最终前八位数据加上奇偶校验位数据1的个数为奇数。

04 寄存器

本实验我们还没用到中断,所以相应的寄存器可以忽略掉。
接下来看一下相应寄存器
TXSTA:在这里插入图片描述
发送状态和控制寄存器
CSRC:时钟源选择,异步的时候不用管,设置为0;
TX9:9位发送使能(包含奇偶校验位,我们没有就是0);
TXEN:发送使能端,发送的时候,设置为1
SYNC:同步和异步的选择
BRGH:跟波特率有关
TRMT:发送移位寄存器的状态位,当这位为1时,表示数据已经发送完;为0,表示数据还未发送
TX9D:用来奇偶校验位,我们没有用到,直接设置为0即可

RCSTA:接受状态控制寄存器
在这里插入图片描述
SPEN:串行端口使能,为1的时候,端口就打开
RX9:这个同样是选择8位,0
SREN:信号接收时能,异步时候不用管,那就设置为0
CREN:连续接受使能端,我们接受完一个字节之后,需要再连续接受下一个字节,所以要设置为1
ADDEN:地址检测使能端,这个是用在9位数据时候,所以不用管,设置为0
FERR:奇偶校验出现错误,这位就置位

在这里插入图片描述OERR:接受溢出置位
RX9D:接受到第9位,放在这里

波特率生成器:
1、SYNC选择同步还是异步,然后BRGH=0/1下,波特率的计算公式是不一样的;

9600波特率,选择高速下,16 x 9600 = 4000000/(X+1) 即可得X = 25
(直接看这个芯片手册里面表格就可以了!)

然后X是放在SPBRG寄存器中

05 注意事项

还有一个点需要给大家提醒一下,大家在做实验的时候,RC6/RC7必须设置为输入input,如果不这么设置,会出现一些问题;

06 bit banging 伪代码

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

07 结尾

在这里插入图片描述

大家记得点赞收藏!!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值