关于单片机串行通信的疑问

来源:百度知道 编辑:UC知道 时间:2024/07/03 00:15:32
本人在学习了单片机的串行通信后,有点疑惑,感觉串行通信不可靠,假设两单片机使用各自的定时器产生相同的波特率进行通信,虽然发送机在发送数据时加上了起始位,但是如果发送的数据与起始位相同呢,接收机就无法正确接收。可能是我对串行通信有误解,希望大虾指教!

我以前也这么想过,这哪有spi方式可靠啊,一干单片机即提供时钟又配合提供数据,多稳定啊。
起始串口是这样的,串口接收端正常为高电平,一旦检测到一个低电平到来,那么内部会对接收端子进行定时查询,一般为为9次有效查询,所以相数据传输当于一个数据包,一旦出现起始位那么即使后面全为1或者全为0都不影响内部的定时查询,也就是说读取引脚数据部会根据数据的延时情况而准时完成采集任务,这个特点决定不会产生数据整体移位情况
起始位与数据相同也就是说低电平的时间为2个串行时钟,内部会检测到是两个0而不是一个,因为串口不是通过数据跳变与否来表式0和1的

你还在不了解什么是波特率,传输速度是定好的,传输的时候每隔一bit的时间接收方就自动检测电位,所以发送的数据不管是什么都不影响判断。也就是说从start位开始后的一段时间内(这段时间根据波特率而定)不管接收到的是什么都是数据,所以COM串行通信波特率很重要,也就是他们是以时间为参考而不是以接收到得内容为参考。

发送是按最少一个字节为单位的....

只要两边晶振相同,波特率相同,通讯就没问题....

方式0
8位移位寄存器输入/输出方式。多用于外接移位寄存器以扩展I/O端口。波特率固定为fosc/12。其中,fosc为时钟频率。在方式0中,串行端口作为输出时,只要向串行缓冲器SBUF写入一字节数据后,串行端口就把此8位数据以等的波特率,从RXD引脚逐位输出(从低位到高位);此时,TXD输出频率为fosc/12的同步移位脉冲。数据发送前,仅管不使用中断,中断标志TI还必须清零,8位数据发送完后,TI自动置1。如要再发送,必须用软件将TI清零。串行端口作为输入时,RXD为数据输入端,TXD仍为同步信号输出端,输出频率为fosc/12的同步移位脉冲,使外部数据逐位移入RxD。当接收到8位数据(一帧)后,中断标志RI自动置。如果再接收,必须用软件先将RI清零。
方式1
10位异步通信方式。其中,1个起始位(0),8个数据位(由低位到高位)和1个停止位(1)。波特率由定时器T1的溢出率和SMOD位的状态确定。一条写SBUF指令就可启动数据发送过程。在发送移位时钟(由波特率确定)的同步下,从TxD先送出起始位,然后是8位数据位,最后是停止