串口通信的基本认识
通信分为并行通信和串行通信,并行通信时的数据各个位同时传送,可以实现字节为单位通信,但通信线多占用资源,成本高。以前用到的的P1=0x55,一次给P1口的8个管脚分别赋值,同时进行信号输出,类似于8个车道可以过去8辆车,这样的形式是并行的,一般称P0,P1,P2,P3为51单片机的4组并行总线。
串行通信,就是一个车道,一个只能通过一辆车,如果一个0x55这样一个字节的数据要传输过去的话,假如低位在前,高位在后的话,那发送方式是:0-1-0-1-0-1-0-1,一位一位的进行传输,要发送8次才能发送完一个字节
STC89C52有两个引脚是专门用来做串口通信的,一个是P3.0(RXD),一个是P3.1(TXD),他们组成的通信接口就是串行接口,简称串口。用于两个单片机进行UART通信。两单片机通信接口连接方式:RXD——TXD,TXD——RXD。
单片机1的TXD发送通道接到单片机2的RXD接收通道,单片机的1的RXD接收通道接到单片机2的TXD发送通道,从而实现相互通信。
当单片机1想给单片机2发送数据,比如发送了0xCE,用二进制表示就是11001110,在串口通信过程中,是低位先发,高位后发的原则,那么就是让TXD首先拉低电平,持续一段时间,发送一位0,然后拉高电平,持续一段时间,发送一位1,继续拉高,在持续一段时间,发送一位1,一直把8位二进制数11001110全部发送完毕,这里涉及到一个问题,就是持续的一个时间段时间“到底是多少”。因而便引入通信中非常重要的一个概念波特率,也叫做比特率。
波特率
波特率就是发送二进制数据位的速率,习惯用baud表示,即我们发送一位二进制数据持续的时间=1/baud。在通信之前,单片机1和单片机2首先都要明确约定好他们之间的通信波特率,必须保持一致,收发双方才能正常通信。
约定好速度之后,我们还要考虑第二个问题,数据什么时候是起始,什么时候是结束?提前和延迟结束都会接收错误。在uart通信的时候,一个字节是8位,规定当没有通信信号发生时,通信线路保持高电平,当数据发送前,先发一位0表示起始位,然后发送8位数据位,数据位是先低再高,数位位发送完后才呢个后再发送一位1表示停止位,这样我们要发送的8位数据,实际上我们发送了10位,多出来两位其中一个是起始位,一个是停止位。而接受方一直保持的高电平,一旦检测到一位低电平,准备开始接受数据,接受8位数据后,然后检测停止位,再准备下一个数据接收。 串口数据发送示意图,实际上是一个时域示意图,就是信号随着时间变化的对应关系。比如在单片机的发送引脚上,左边的是先发生的,右边的是后发生的,数据位的切换时间就是波特率分之一秒,如果能够理解时域的概念,后边很多通信的时序图就很容易理解了。
手把手教你单片机串口通信-基础篇
http://www.51hei.com/bbs/dpj-107804-1.html
|