430串口中,有个R/D控制线,在接收上位机的数据,但本身的数据有无发送完毕不知道啊,什么时候才可置低R/d位来接收数据啊?好像430没有发送完中断标志
字节主动发送,
单字节是否发送完,不用你操心.
用程序检测,一般都能发出去,除非你的的时钟有问题.
但我要确切知道几时发送完了,应该我要把R/D实时置低,来接收上位机信息。
但我要确切知道几时发送完了,应该我要把R/D实时置低,来接收上位机信息。
只要R/D置高的时间够长,确实会发送完毕,但我要发送完后马上把R/D置低来接收上位机命令啊。
所以R/D几时置高的时间不能确定下来。
半双工通讯系统,应该有个协议。
双方发送的数据(不论是“指令”还是“数据”),要有结束符号。
如果上位机是主控,则将MCU设置在常收状态。
当上位机需要MCU反馈信息的时候,它应该等待MCU发送数据。这时,MCU发送数据给上位机。
如果MCU是主控,这个过程就反过来。
当然,哪边为主控,也可以通过协商进行动态转换。
半双工通讯,可以多发送一个字节,作为判断,当最后个字节(作为判断用)写入发送缓存产生中断时,在中断里改变R/D状态。
不是很明白楼主“好像430没有发送完中断标志”的意思。
430有发送完一个字节的中断,发完一个字节后,在中断中发送下一字节,从而实现连续发送的功能。
每次进入发送中断,先判断是否发完,若未发完所有字节,发送下一字节;
若发完所有字节,置低R/d位,进入接收状态。
希望对你有所帮助!
补充一下,430的发送中断(USART0TX_VECTOR)其实就是发送完一个字节的中断(其本意是可以发送下一字节的中断,也就是发送已经进入闲置状态);
在发送中断中发送下一节,并让指针加一。当需要发送一串数据时,先发送第一个字节,此后,中断程序将自动发送其余字节。
当然发送第一个字节前还要处理好R/D,要设好发送总数和发送指针。
发送中断中也要判断发送指针有没有等于或超过发送字节总数,若这样的话就已经发完,要处理R/D