文档介绍:两设备进行全双工异步串行通讯时的连接关系全双工可以同时收发,互不干(TX 发数据, RX 收数据); 串行是指在一条线上发送 8位数据(另一设备在该线接收数据) 共地的目的: 什么是全双工异步串行通讯异步: 接收方何时采样? 通讯双方实现约定波特率(发送方每秒发多少位,即接收方隔多长时间采样 1次),为了避免累计误差,每次通讯传输 1个字节。发送方控制数据线,在空闲时保持高电平。开始一次通讯时发送方将数据线拉低,低电平保持时间 1位,用该下降沿使双方保持同步。在起始位后传输 8位数据,最后传输 1位的停止位,停止位为高电平,使数据线回归空闲时的高电平。什么是全双工异步串行通讯为了增加传输距离,提高抗干扰能提,加快传输速率,引入电平转换。常用电平转换 RS232 , RS422 , RS485( 电平转换无智能) 什么是全双工异步串行通讯串口 0 是一个具有帧错误检测、地址识别硬件并支持多处理器通信的增强型串口。串口 0支持半双工同步通讯和全双工异步通讯。串口 0有4种工作方式:方式 0、1、2、3 方式 0是半双工同步方式,我们不介绍。方式 1、2、3是全双工异步方式,我们介绍。串口 0 C8051F120 要通过串口 0发送一个字节时,需将待发送的数据写入“发送 SBUF0 寄存器”(是一个 SFR) ,串口 0硬件自动按下图时序将“发送 SBUF0 寄存器”中的数据通过串口发出, 发送完成后硬件将 TI0( 是一个中断源,表示串口发送完一个字节)置1。发送数据当其他设备按串口时序发来一个字节时,数据是 1个位 1个位传来的(如下图),每来 1个位,该位进入移位寄存器(用来缓存不完整的数据)最高位,当所有的 8位到齐后 C8051F120 串口 0 的硬件检查该数据,如无误则将该字节写入“接收 SBUF0 寄存器”(是一个 SFR) ,然后将 RI0 置 1 ( 是一个中断源,表示串口接收到一个字节),等待 C8051F120 的 CPU 读走该字节。接收数据接收数据由于具有二级接收缓存(移位寄存器& 接收 SBUF0) ,这就允许 UART0 在软件尚未从“接收 SBUF0 ”读取第 k个字节数据的情况下,开始接收第(k+1) 个字节数据。由于只有二级缓存, 如果第 k个字节没从“接收 SBUF0 ”读走, 第 k+1 个字节的数据已经接收完了,此时第 k+1 个字节的数据从移位寄存器写入“接收 SBUF0 ”(丢了 1个字节数据) 该情况发生后,一个“接收覆盖位”(SFR) 被置 1,用于指示新的接收数据已被锁存到接收缓冲器而前一个接收数据尚未被读取。解决办法:收到 RI0 ,尽快去读“接收 SBUF0 ”“发送 SBUF0 寄存器”、“接收 SBUF0 寄存器”在物理上是 2个独立的特殊功能寄存器。其中:“发送 SBUF0 寄存器” C8051F120 的 CPU 只能写不能读; “接收 SBUF0 寄存器” C8051F120 的 CPU 只能读不能写。因此“发送 SBUF0 寄存器”、“接收 SBUF0 寄存器”的字节地址相同,合称 SBUF0 。读 SBUF0 时访问“接收 SBUF0 寄存器”,写 SBUF0 时访问“接收 SBUF0 寄存器”对 UART0 的控制是通过串行控制寄存器 SCON0 (SFR) 实现的。 UART0 有两个中断源: TI0() ,1个字节发送完成后置 1 RI0() ,接收完 1个字节后置 1。中断方式: 当 CPU 转向中断服务程序时硬件不清除 TI0 、 RI0 ,进入串口中断服务子程序后,先分析时什么原因计入串口中断, 然后用软件清除这些标志位,最后再作出不同的处理。 UART0 也可以工作在查询方式,此时占用 CPU 。