发布网友 发布时间:2022-05-20 01:59
共1个回答
热心网友 时间:2023-08-21 14:23
其实这个是没有为什么的,设计上觉得这样做更好,于是就规定这么做了。
你可以这样理解:由于SM2是专门为了多机通信而设计的,为的是要让从机知道什么时候收到的数据是表示通信地址,从而区分主机是否要和自己通信。SM2=1时,主机发来的第9位数据就可以知道收到的数据是不是自己想要的。
我们先回顾一下TB8、RB8的知识:
SM2,多机通信控制位,主要用于方式2和方式3。当从机的SM2=1时,从机可以利用收到的RB8来控制是否置位RI(产生中断请求)。RB8=0时,表示收到的是数据帧,收到的信息丢弃,不产生中断;RB8=1时,表示收到的是地址帧,收到的数据要进入SBUF,并置位RI,产生中断,在中断服务程序中将数据从SBUF读走,判断该地址帧是否与本机地址一致。若不一致,则保持SM2=1,继续监听。若一致,则清零SM2,以便接收数据帧)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并置位RI,产生中断,在中断服务程序中将数据从SBUF读走处理(即此时RB8不具有控制RI是否置1的功能)。
通过控制SM2,可以实现多机通信。
SM2=1时,从机只想要接收RB8=1的数据(地址帧)。
如果从机要接收主机发来的数据帧,从机要把SM2清零。
从机收完数据帧后,需要把SM2置1,以便下一次与主机通信。
RB8就是主机发来的第9位数据。