最近一个人在弄DMX512通信协议,但是弄了一段时间未果,现诚恳希望能得到砖家们指点指点,先谢谢了。 1单片机的串行通信是怎么工作的?? 是不是把SCON和PCON设置好,在需要进入串行中断服务程序(比如:接收数据)的时候,只要SETB ES(注:我用的是汇编)就可以 马上进入串行中断服务程序了,那么在串行中断服务程序里面,一帧数据接收完后,RI就被置1了呢??
还有下面两段话,哪段是正确的: SM2:多机通信控制位,由软件设定。串行口的方式2和方式3适用于多机通信。在方式2或方式3中,当SM2=1,若接收到的第9位数据(RB8)为0,则不能置位RI;只有收到RB8=1,才置位RI。SM2=1用于多机通信中,只接收地址帧,不接收数据帧。而当SM2=0时,只要接收到一帧信息(无论是地址还是数据),RI都被置位。双机通信时,通常使SM2=0,在方式0中,SM2必须为0。
SM2在方式2或方式3下,如果该比特为0,串口以单片机发送或接收方式工作,TI和RI以正常方式被激活,但不引起中断请求;若该比特为1并且SCON中的RB8也被置位时,RI不仅被激活而且可以向CPU请求中断(疑问:这时说的中断请求,是不是说,一帧数据接收完毕,RI被置1??)。方式2的接收过程也与方式1类似,但是方式1中的RB8存放的是停止位,方式2中存放的是第9位数据位。所以在方式2必须满足接收有效字符的条件是:RI=0和SM2=0或者接收到的第9位数据为1。第一个条件是要求SBUF为空,即用户应预先读走SBUF中的信息,好让接收电路确认它已空。第二个条件是提供了利用SM2和第9个数据位共同对接收加以控制。若第9个数据位是奇偶校验,则可让SM2=0以确保串口能可靠接收;如果是接收控制,则可让SM2=1,然后依靠第9位数据的状态来确定接收是否有效。 |