1.不管你有没有处理RI,还是在继续接收数据的。数据接收完成之后,数据从移位寄存器转移到数据寄存器中,这时才产生中断,但移位寄存器是空的,还可以继续接收数据。
2.你想让串口的收和发同时工作,那就只能使用中断方式,你用查询方式是不可能的。如果是使用“半双工”,那就简单些:A查询方法发送数据,B以查询方式接嫌谈收数据,反之依然,这样的缺点是比较耗时,没有实时性。
后面的几个问题就用2来回答了,就是用中断的方法来接收和发送数据,这样不管李码你是不是同时收发的,都能处理。按照你的例子说,上位机要发送命令来查询下位机的结果,那简单,下位机必须要一个缓冲区来保存收到的数据,然后在主程序中处理缓冲区中的内容,再根据情况向上位机发送数据。当然下位机的发送也可以使用缓冲区来保存待发送的数据。
使用缓冲区的好处就是能保证不发送遗漏。比如上位机可以一次发送多个命令给下位机,这样就是在接收缓冲区中形成命令队列,即“排队”,下位机逐一处理队列中的每一条命令,然后将对应结芹扰碰果送入发送缓冲区中“排队”,再有串口发送中断逐一将其中的字节发送出去。
这个程序,你可以这样看,先在串口中断里面接收一个字符,然后再通过锋拿宽串口将该字符发送出去。在发送的过程中关闭串口中断,不再敏肢接收字符,发送银亮完毕后重新打开中断,接收另外一个字符,a的值就是单片机接收的数据,接收完后,置位标志变量flag,然后对标志变量进行判断,若接收到了,则执行发送指令 SBUF=a。就这样!欢迎分享,转载请注明来源:内存溢出
评论列表(0条)