51单片机的串行通信是怎么工作的??

2025-02-24 05:41:51
推荐回答(3个)
回答1:

兄弟,你可以看看书呀,书上不是说了嘛。这么多字要人打出来!!!
方式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可通过编程设置成多种波特率,这正是这两种方式的差别所在。

回答2:

两段都对啊
SM2是一个控制位,由软件控制,方式0一般不用,当处于方式2和3时,因为传输的数据有11位,数据位有9位,有效数据8位,第9位数据位是判定是否丢弃前8位数据用的,如果为0,则丢弃,前提是SM=1.
关于你的疑问(疑问:这时说中断请求,是不是说,一帧数据接收完毕,RI被置1??)是的,因为此时SM2=1,并且RB8=1(即接收到的第9位数据为1),所以RI置位并且产生中断。如果程序中设置SM2=0的话,此时就不能置位产生中断了,这就是SM2的作用,尤其是在多机通讯时,用处很大,控制哪台下位机该收数据,哪台不该收。

回答3:

方式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