【8051异步串口的收发原理】8051异步串口的收发原理
《8051异步串口的收发原理》
Tags: 8051,数字电子,数据通信
异步串口通信的基本原理是 , 点对点异步 , 没有时钟线没有地址 , 以低电平为开始位 , 高电平闲置 , 通信双方约定相同的数据帧大小 , 还有在相同的波特率下 , 收发顺利进行 。异步串行通信可双线同时收发 , 为全双工通信 。数据帧内容包括一个开始位、5到9个数据位、一个可选的检验位和一到两位的停止位 。
![8051异步串口的收发原理](http://img.gansulong.com/230620/033U03b8-0.gif)
文章插图
以上是异步串口通信的通用原理 , 但具体的通信过程是怎样的呢?这就得拿一个具体的实现——8051的built-in UART来分析一下了 。
8051的built-in UART可以通过软件编程工作于四种模式:模式0、模式1、模式2和模式3 。这里以比较常用的模式1——8位可变波特率的UART——来简要分析一下其异步通信过程 。
模式1的帧大小为10位:一个开始位(0)+八个数据位(最低有效位先)+一个停止位(1) , 在接收方 , 停止位被送入串口的控制寄存器SCON的RB8 。下图为模式1的功能简图:
[异步串行传输的发送]由一个“写入SBUF”信号触发 , 任何以SBUF寄存器为目标寄存器的指令被执行都产生“写入SBUF”信号 , 如MOV SUBF,A 。“写入SBUF”信号同样向[移位寄存器]的第九位写入1 , 并且发一个信号给[TX控制单元] , 向其请求一次发送 。数据传送的实际开始点是下一个发送脉冲(TX CLOCK)的到来时 , 不是与“写入SBUF”信号同步 , 看下面的时序图 。[TX控制单元]的工作脉冲——发送脉冲(TX CLOCK)是对系统发来的时钟脉冲经一个[四位计数器]拉伸16倍后获得 , 而[下沿降检测单元(1-to-0)]是直接使用系统发来的时钟脉冲工作 , 因此 , 对接收信号(RXD)采样的速度比发送高16倍 。
![8051异步串口的收发原理](http://img.gansulong.com/230620/033U06345-1.png)
文章插图
由于[DATA控制线]默认输出为低电平 , 它与[移位输出线]输入一个[与门]后也是低电平 , 而[SEND控制线]默认输出为高电平 , 二者输入一个[或门]后 , 输出是高电平 , TXD空闲是高电平 。[TX控制单元]在第一个发送脉冲拉低SEND控制线 , TXD发出一个低电平开始位 , 一个发送脉冲过后 , [TX控制单元]拉高DATA线 , TXD的输出取决于移位输出 。尔后 , TX控制单元每发送一个移位脉冲就有一位数据发送到TXD 。数据位从右边移出后 , 左边移入0 。当移剩[最高有效位]时 , 最高有效位的左边是最初送的第九位1 , 左边其余位全是0 , 这种模式会被zero 检测到 , 并置[TX控制单元]进入[发送最后一位]状态——发送一位后拉高SEND线 , 并置中断标志TI , 向MCU发了“发送完毕”的中断请求 。[发送最后一位]发生在“写入SBUF”信号后的第十个发送脉冲 。
[异步串行传输的接收]由[下沿降检测单元]在RXD线检测到1到0的跳变触发 。前面已经指出 , 下沿降检测单元16倍于波特率的速度对RXD进行采样 , 也就是说 , 每一个发送脉冲采样16次 。当检测到一个1到0的跳变 , 分频的四位计数器被重置 , 重置计数器是因为1到0的跳变可能出现在任何一个采样周期 , 重置计数器可对齐发送脉冲与接收脉冲的边沿 , 做到真正的同步 。计数器被重置的同时 , 1FFH被写入[输入移位寄存器](input shift ) 。