51单片机通信 的一个简单问题
51单片机通信对书上的一句话不是很理解在方式一工作时:若SM2=1,则只有接收到有效停止位时,RI才置一;若SM2=0,则RB8是接收到到的停止位。哪位高手能帮我解答一下...
51单片机通信 对书上的一句话不是很理解 在方式一工作时:若SM2=1,则只有接收到有效停止位时,RI才置一 ;若SM2=0,则RB8是接收到到的停止位。
哪位高手能帮我解答一下吗? 展开
哪位高手能帮我解答一下吗? 展开
展开全部
这需要说明一下单片机串行接收的处理过程:串行通讯内部有一个9位的移位寄存器。单片机中的异步通讯有模式1、模式2、模式3,传输的分别是8位、9位、9位信息,再加上起始位和停止位,其实信息流是10位、11位、11位。RXD线正常情况下是高电平,也就是1,当发生1到0的跳变时说明起始位到来,通讯接收开始启动(以模式1、10位信息为例)。
1、检测到跳变,单片机将会把9位移位寄存器全部置1,也就是1FF;
2、在起始位信息中间的时刻,9位移位寄存器移位左移,将起始位(0)移入最低位;
3、继续采样RXD上的状态,每次采样接收后左移9位移位寄存器同时将得到状态移入最低位;
4、由于初始是整个寄存器各位全部为1,当停止位来临时,9位移位寄存器的最高位为0,此时单片机就认为通讯将结束,触发最后一次移位,这样9位移位寄存器的高8位就是实际的数据,而最低位起始就是停止位信息。
5、移位完成后,单片机开始做最后一件事:将9位移位寄存器的高8位写入SBUF,将最低位写入RB8,然后置RI请求中断。
其中第5步并不是说停止位接收完成后就自然会发生的,需要同时满足两个条件,否则接收到的数据会丢失:
a、RI=0:如果RI=1说明上次中断未处理完,此时不会执行5
b、SM2=0,或者接收到的停止位=1,二者满足其一即可
明白了整个接收过程和触发机制,回过头再看你的问题:
“若SM2=1,则只有接收到有效停止位时,RI才置一”:此时就是上面的条件b的后一种情况,由于是方式1,第10位也就是停止位就是1,所以只要此时RI=0,就会引发RI置1的操作。
“若SM2=0,则RB8是接收到到的停止位”:此时就是上面的条件b的前一种情况,因为此时的9位移位寄存器中的最低位正好是刚移入的停止位,所以将其送到了RB8中。
至于为什么要设定这种条件,需要全面深入的了解4种工作模式后才会有合理的答案,我一下子也不知道该如何去解释,还是你自己先看看书吧。
51单片机的串行通讯接口功能还是很丰富的,比如SM2在多机通讯中的应用就很巧妙,比如模式0的同步移位寄存器功能,等等。只是现在很少有人搞得这么深了。
1、检测到跳变,单片机将会把9位移位寄存器全部置1,也就是1FF;
2、在起始位信息中间的时刻,9位移位寄存器移位左移,将起始位(0)移入最低位;
3、继续采样RXD上的状态,每次采样接收后左移9位移位寄存器同时将得到状态移入最低位;
4、由于初始是整个寄存器各位全部为1,当停止位来临时,9位移位寄存器的最高位为0,此时单片机就认为通讯将结束,触发最后一次移位,这样9位移位寄存器的高8位就是实际的数据,而最低位起始就是停止位信息。
5、移位完成后,单片机开始做最后一件事:将9位移位寄存器的高8位写入SBUF,将最低位写入RB8,然后置RI请求中断。
其中第5步并不是说停止位接收完成后就自然会发生的,需要同时满足两个条件,否则接收到的数据会丢失:
a、RI=0:如果RI=1说明上次中断未处理完,此时不会执行5
b、SM2=0,或者接收到的停止位=1,二者满足其一即可
明白了整个接收过程和触发机制,回过头再看你的问题:
“若SM2=1,则只有接收到有效停止位时,RI才置一”:此时就是上面的条件b的后一种情况,由于是方式1,第10位也就是停止位就是1,所以只要此时RI=0,就会引发RI置1的操作。
“若SM2=0,则RB8是接收到到的停止位”:此时就是上面的条件b的前一种情况,因为此时的9位移位寄存器中的最低位正好是刚移入的停止位,所以将其送到了RB8中。
至于为什么要设定这种条件,需要全面深入的了解4种工作模式后才会有合理的答案,我一下子也不知道该如何去解释,还是你自己先看看书吧。
51单片机的串行通讯接口功能还是很丰富的,比如SM2在多机通讯中的应用就很巧妙,比如模式0的同步移位寄存器功能,等等。只是现在很少有人搞得这么深了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询