首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机串口通信时,在串口初始化之前要加延时吗?该如何处理

2013-01-25 
单片机串口通信时,在串口初始化之前要加延时吗?各位高手:我们编了一个串口通信程序,当串口初始化前不加延

单片机串口通信时,在串口初始化之前要加延时吗?
   各位高手:我们编了一个串口通信程序,当串口初始化前不加延时的时候  ,发送的数据与接收的数据正好错一位。
加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!
   
[解决办法]
一般的串口发送字节函数 都会有一个发送完毕等待的过程。例如:MSP430的就是是
while (!(IFG2 & UCA0TXIFG)) ;楼主还是根据自己MCU型号,找相关例程比对一下吧。
[解决办法]
应该有特殊的寄存器,用while判断一下晶振是否稳定。
稳定之后在发数据。
[解决办法]
加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!

感觉这个可能是该芯片的串口有两级缓冲的原因

第一级缓冲是供单片机读写的

第二级是用于通信的。

在第二级缓冲完成通信,串口会根据第一级缓冲是不是空来选择产生的中断

如果,通信完成,缓冲为空,会产生通信完成中断

如果通信完成,缓冲不为空,会把第一级缓冲中的数据送入第二级,进行通信,同时产生的是缓冲为空的中断

LZ可能是都用缓冲为空中断进行处理,其实缓冲为空的时候,通信才刚刚开始,如果这个时候恢复了总线上的状态(如485中的收和发切换)就会造成通信错误,最后一个字节丢失

所以在应用上,通常要对最后一个字节等待的中断标志进行更换

热点排行