我以前也这么想过,这哪有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位数据位,最后是停止位。这样的一帧10位数据发送完后,中断标志TI置位。在允许接收的条件下(REN=1),当RXD出现由1到O的负跳变时,即被当成是串行发送来的一帧数据的起始位,从而启动一次接收过程。当8位数据接收完,并检测到高电乎停止位后,即把接收到的8位数据装入SBUF,置位RI,一帧数据的接收过程就完成了。方式1的数据传送波特率可以编程设置,使用范围宽,其计算式为:波特率=2SMOD/32×(定时器T1的溢出率)
其中,SMOD是控制寄存器PCON中的一位程控位,其取值有0和l两种状态。显然,当SMOD=0时,波特率=1/32(定时器Tl溢出率),而当SMOD=1时,波特率=1/16(定时器T1溢出率)。所谓定时器的溢出率,就是指定时器一秒钟内的溢出次数。
方式2,3
11位异步通信方式。其中,1个起始位(0),8个数据位(由低位到高位),1个附加的第9位和1个停止住(1)。方式2和方式3除波特率不同外,其它性能完全相同。方式2,3的发送。方式2和方式3与方式l的操作过程基本相同,主要差别在于方式2,3有第9位数据。
发送时,发送机的这第9位数据来自该机SCON中的TB8,而接收机将接收到的这第9位数据送入本机SCON中的RB8。这个第9位数据通常用作数据的奇偶检验位,或在多机通信中作为地址/数据的特征位。方式2和方式3的波特率计算式如下:方式2的波特率=2SMOD/64×fosc
方式3的波特率=2SMOD/32×定时器T1的溢出率由此可见,在晶振时钟频率一定的条件下,方式2只有两种波特率,而方式3可通过编程设置成多种波特率,这正是这两种方式的差别所在。
多机通讯是由SM2控制的,如果不用多机通讯可以一直置为0
如果你是两个单片机进行通信的话,你要看看你的两个单片是不是共地了,如果没有共地,通信肯定会出错!
楼上正解