单片机内部有一个功能强大的全双工串行口

(此处已添加圈卡,请到今日头条客户端查看)

单片机内部有一个功能强大的全双工串口,串口有四种工作模式供不同场合使用。波特率可由软件设置,由片内定时器/计数器生成。串口收发可以工作在查询模式或中断模式,使用起来非常灵活。

除了数据通信外,单片机的串口还可以用来驱动单片机应用系统中的键盘和显示器,这是其他微机系统无法比拟的。

串口的结构与控制

为了进行串行数据通信,单片机也需要相应的串行接口电路。但是,这个接口电路并不是一个单独的芯片,而是集成在单片机芯片内部,成为单片机芯片的一个组成部分。

80C51单片机内部的串口由发送缓冲寄存器SBUF、接收缓冲寄存器SBUF、发送控制寄存器、接收控制寄存器、输入移位寄存器和输出控制门组成。控制单片机串口的控制寄存器有两个:特殊功能寄存器SCON和PCON,可以通过软件改变它们来控制串口的工作模式和波特率。

缓冲寄存器 SBUF

80C51单片机内部有一个全双工串行通讯口,即串行收发缓冲器SBUF。这两者是物理上独立的接收器和发送器,既可以接收数据,也可以发送数据。但是,接收缓冲区只能读不能写,而发送缓冲区只能写不能读。两个缓冲区共享相同的地址(99H)。

该通讯口可用于网络通讯、串行异步通讯,也可作为同步移位寄存器使用。如果在通讯口的输入输出引脚上加一个电平转换器,也可以很容易地形成标准的RS-232和RS-485接口。

逻辑上,只有一个SBUF,代表发送寄存器和接收寄存器,地址相同(99H)。物理上,有两个SBUF,一个是发送寄存器,另一个是接收寄存器。

串口控制寄存器SCON

该寄存器的字节地址为 98H,具有位寻址功能。

SCON 格式如下:

图片[1]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

SM0(SCON.7), SM1(SCON.6):控制串口的工作模式。

SM2(SCON.5):允许模式2和模式3进行多机通讯的控制位。在模式2或模式3下,如果SM2=1,则接收到的第9位数据(RB8)@RI > 为 0 时不激活。模式 1 下,如果 SM2=1,RI 只有在接收到有效停止位时才会激活。如果没有接收到有效停止位,RI 将被清零。模式 0 下,SM2必须设置为 0。

REN(SCON.4):启用串行接收控制位。REN=1 启用串行接收,REN=0 禁用串行接收。该标志由软件设置或清除。

TB8(SCON.3):工作在模式2和模式3时,该位是要发送的数据的第9位。在某些通信协议中,第9位用于奇偶校验(加奇偶或补偶);而在MCS-51多处理器通信中,该位是区分地址帧或数据帧的标志,必要时由软件置位或复位。

RB8(SCON.2):工作在模式2和模式3时,该位是已经接收到的数据的第9位,是奇偶校验位。是MCS-51多处理器通信标志位的区别地址帧/数据帧 模式1,若SM2=0,RB8存储接收数据的停止位;模式0,RB8不使用,必要时可软件置1或清0。

TI(SCON.1):发送中断标志位。在模式0下,当发送第8位数据时由硬件置位;在其他模式下,当停止位开始发送时由硬件置位。当TI设置=1时,申请中断,CPU响应中断后,软件将TI清零,然后发送下一帧数据。

RI(SCON.0):接收中断标志位。在模式0,接收到第8位数据时由硬件自动置位;在模式1,SM2=1,只有接收到有效的停止位, 只有这样才能设置 RI 其他模式下 RI 在接收到停止位中间由硬件设置 设置时申请中断 CPU 响应中断后取数据并清除 RI标志,必须由软件清除。

SCON 中的所有位在复位时被清除。

特殊功能寄存器 PCON

它的字节地址为87H,没有位寻址功能。PCON的格式如下:

图片[2]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

其中只有D7位与串口有关。

SMOD:波特率选择位。

串口的工作原理

串口有四种工作模式,由串口控制寄存器SCON中的SM0、SM1的状态定义。代码和功能如表 2-3 所示。在这四种工作模式中,只有模式1、2、3 用于串行通信。Mode 0 主要用于扩展并行输入/输出端口。

图片[3]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

表2-3 串口工作模式

表中:fosc为晶振频率,UART为通用异步接收器和发生器。

方式 0

模式0状态下,串口为同步移位寄存器的输入/输出模式,波特率固定,数据从RxD(P3.0)端输入,进行同步移位,脉冲由TxD(P3.1)端输出。模式0主要用于扩展并行输入输出端口(如串行LED数码管显示系统等) .)。

(1)模式 0 发送

当有数据写入串口发送缓冲器SBUF 时,串口会以fosc/12 的波特率从RxD 引脚(从低到高)输出8 位数据。当发送 8 位数据时,将发送中断标志 TI 置 1。TxD 引脚输出一个同步脉冲,波形如图 2-22 所示。

(2)模式 0 接收

在 REN=1 和 RI=0 的条件下,将开始一个接收过程。此时RxD为串行输入端,TxD为同步脉冲输出端。串口接收的波特率为 fosc/12,其时序如图 2-23 所示。接收到一帧数据(8位)后,控制信号复位,中断标志RI置1,处于中断申请状态。再次接收时,RI 必须用软件清零。

图片[4]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

▲图 2-22 串口“mode 0”发送时序

图片[5]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

▲图 2-23 串口“mode 0”接收时序

模式0下,SCON中的TB8、RB8位无用,多机通信控制位SM2必须为0。模式0下发送或接收8位数据时,中断标志TI或RI由硬件设置为 1 并发送中断标志 TI 或 RI,并向 CPU 应用中断。CPU 响应 TI 或 RI 中断后,必须由用户程序清除标志 TI 或 RI。

方式1

当串口工作在模式1时,SCON中SM0、SM1的两位分别为0、1,则串口被控制为8位可变波特率异步通信接口。发送的每帧信息为 10 位:1 个起始位、8 个数据位(先低位,然后是高位)和 1 个停止位。

(1)方法一发送

串口发送模式1时,数据从TxD端输出,CPU执行指令将数据写入发送数据缓冲区SBUF。数据字节写入 SBUF 后,串口发送器开始发送。发送完一帧信息的数据位后,发送中断标志置1串口转换器被识别为其他设备,其时序如图2-24所示。

图片[6]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

▲图2-24 串口“模式1”发送时序

(2)模式 1 接收

当 REN=1 时,允许接收器接收,数据从 RxD 端输入。接收器以选定波特率的 16 倍采样 RxD 终端的电平。当检测到 RxD 端从 1 变为 0 时,接收器开始接收并重置内部 16 频率计数器以实现同步。

在起始位,如果接收到的值不为0,则起始位无效,接收电路复位,当再次接收到从1到0的跳变时,重新启动接收器。如果接收到的值为0,则起始位有效,接收方开始接收剩余的帧(一帧信息为10位)。模式1接收,如果同时满足以下两个条件:RI=0、SM2=0,接收到的停止位=1,则接收到的数据有效,加载SBUF,停止位进入 PB8、 接收中断标志 RI 设置为 1。接收控制器再次采样 RxD 的负跳变,以便接收下一帧数据。

如果不能同时满足这两个条件,信息就会丢失。中断标志 RI 必须由用户软件清零。正常情况下,串口工作在模式 1 时,SM2 设置为 0。模式 1 的接收时序如图 2-25 所示。

图片[7]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

▲图2-25 串口“模式1”接收时序

方式2

当SM0、SM1的两位分别为1、0时,串口工作在模式2,串口定义为9位异步通信接口。可编程位(TB8)@>发送时根据需要设置为0或1,接收时将可编程位发送到SCON中的RB8。

(1)方法2发送

模式2发送时,数据从TxD端输出,发送的一帧信息由11位组成:1个起始位,8个数据位(低位在前,高位在后),1个可编程位(第9位)数据位)和1个停止位,附加的第9位数据是SCON中的TB8。TB8由软件置1或清0,可作为多机通信中的数据标志位,也可作为数据奇偶校验位。

CPU 执行一条写 SBUF 的指令后,立即启动发送器发送。发送一帧信息后,TI 置 1,其时序如图 2-26 所示。在发送下一帧信息之前,TI 必须由中断服务程序(或轮询程序)清零。

图片[8]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

▲图 2-26 串口“模式 2”发送顺序

(2)模式 2 接收

当SM0、SM1的两位分别为1、0,REN=1时,允许串口接收模式2的数据。数据从RxD端输入,接收11位信息:1 个起始位、8 个数据位、1 个可编程位(第 9 个数据)和 1 个停止位。当接收端在 RxD 端对从 1 到 0 的跳变进行采样,判断起始位有效时,开始接收一帧信息。接收端接收到第9位数据后,若RI=0且SM2=0或接收到的第9位数据为1,则将接收到的数据发送到SBUF,将第9位数据发送到RB8,设置RI =1,其时序如图 2-27 所示。如果不能同时满足这两个条件,接收到的信息就会丢失。

8)0@>

▲图2-27 串口“模式2”接收时序

方式3

当 SM0、SM1 的两位为 11 时,串口工作在模式 3,模式 3 为 9 位可变波特率异步通信模式。时序与接收时序相同。

波特率计算和串口初始化

波特率计算

在串行通信中,发送方和接收方的波特率必须一致。串口的4种工作模式可以通过软件设置,每种模式的波特率都可以确定。

(1)方式0的波特率是固定的,为单片晶振频率fosc的1/12,即BR=fosc/12。

如果fosc=6MHz,波特率/s;如果 fosc=12MHz,波特率为 1Mbit/s。

(2)方式2的波特率也是固定的,有两种,一种是1/32晶振频率,一种是1/64晶振频率,即fosc/32和fosc /64 。例如表示为:

8)4@>

式中,SMOD为特殊功能寄存器PCON串口波特率系数的控制位,SMOD=1表示波特率加倍。请注意,PCON 不能使用位寻址,只能对其进行字节操作。

例如12M晶振系统,如果SMOD=0,波特率=188)5@>5kbit/s;SMOD=1,波特率/s。

(3)模式1和模式3的波特率是可变的,其波特率由定时器1的计数溢出决定(对于80C52,也可以使用定时器2的计数溢出),公式为:

8)7@>

Timer 1的溢出率计算公式为:

8)8@>

各种方式的波特率计算如表2-4所示。

8)9@>

表 2-4 波特率计算公式

表中,如果SMOD=0,则K=1;如果 SMOD=1,则 K=2。

通常在使用单片机的串口时,所选择的晶振频率fosc是比较固定的(一般为6MHz、12MHz或11.)。单片机与单片机通信时,选择的波特率是相对固定的。

在实际使用中,定时器T1的初始值往往是根据已知的波特率和时钟频率来计算的。为方便使用,常用波特率与初始值 X 的关系如表 2-5 所示。

图片[9]-单片机内部有一个功能强大的全双工串行口-4747i站长资讯

表2-5 常用通信方式及其波特率

有三点需要注意。

(1)表2-5只是一些特定系统的串口通信的典型数据。对于其他一些未列出的波特率,应该通过上面的公式计算得到。可以调整相关参数得到所需的波特率。

(2)当使用的时钟振荡频率为12MHz或6MHz时,表中的初始值X与对应的波特率存在一定的误差。例如FDH对应的理论值为10416波特(时钟振荡频率为6MHz时),与9600波特相差816波特,可以通过调整时钟振荡频率fosc来消除误差。例如,如果采用的时钟振荡频率为11.,在一个需要串行通讯的系统为了保证串行通讯的准确性,一般采用11.的晶振。

(3)如果串行通信使用很低的波特率,可以将定时器T1设置为模式1计时。但是当T1溢出时,需要在中断服务程序中重新加载初始值。中断响应时间而指令的执行时间也会导致波特率出现一定的误差,可以通过改变初始值来适当调整。

串行通信的检出

异步通信过程中可能会出现帧格式错误、超时错误等传输错误。在开发带串口的单片机时,在通信过程中要考虑数据的错误校验,因为错误校验是保证通信准确无误的关键。常用的错误校验方法有奇偶校验(80C51系列单片机编程采用这种方法)、和校验和循环冗余校验。

(1)奇偶校验

发送数据时,数据位后面的一位数据为校验位(1或0)。设置为奇校验时,数据中1的个数与校验位个数1之和应为奇数;设置为偶校验时,数据中 1 的个数与奇偶校验位中 1 的个数之和应为偶数。接收时,接收方应具有与发送方相同的错误检查设置,当接收到一个字符时,检查1的个数,如果两者不一致,则说明数据传输有错误。

奇偶校验是按字符校验的,会影响数据传输速度。这一特性使其一般只用于异步串行通信。

(2)总和校验

所谓和校验,是指发送方对发送的数据块求和(字节数的总和),生成一个字节的校验字符()并附加到数据块的末尾。接收端在接收到数据时,也会先对数据块进行求和串口转换器被识别为其他设备,将得到的结果与发送端的校验和进行比较。如果它们匹配,则没有错误。否则,会发生错误。这种和检查的缺点是它不能检测字节顺序错误。

(3)循环冗余检查

该检查对数据块执行一次。例如,访问磁盘信息、ROM或RAM存储的完整性等。这种方法广泛用于串行通信方法中。

串口初始化

在使用单片机的串口之前,应该对其进行编程和初始化,主要是设置定时器1、串口控制和产生波特率的中断控制。具体步骤如下。

(1)确定定时器 1 的工作方式 – 对 TMOD 寄存器进行编程。

(2) 计算定时器 1 的初始值 – 加载 TH1, TL1。

(3)启动定时器 1 – 编程 TCON 中的 TR1 位。

(4)确定串口的控制——编程SCON。

(此处已添加圈卡,请到今日头条客户端查看)

文章来源:http://www.toutiao.com/a6678824596021445128/

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享