原创 串口惊魂

2008-5-15 21:34 2499 12 12 分类: MCU/ 嵌入式
UART串口就像我的宠物,亲亲热热十几年了,一直很温顺。今天突然向我龇牙,被它吓出一身冷汗。

其实事件的起因很简单,算是我多事,本来没什么的。焊好一片新板,uPSD3251的,11.0592的晶体,带两个串口,想调试一下。就写了一段单片机的程序,在串口接收中断里面把收到的东东立刻发回去。

用PC机串口调试软件定时发出一个测试字符“a”,然后接收,Rx和Tx指示LED同时闪亮,接收正确。当我随手把测试字符改为“abcdefg”时,就出现乱码了,好像大约一秒出现一次(巧合,跟自动发送的定时时间有关)。

于是怀疑是不是没有伺候好看门狗,经测试,那条狗很尽职,从来不乱叫。

然后怀疑晶体的质量,换了晶体,也换了相应的电容,愁容依旧。

最后,修改程序,把收到的东东放到接收缓冲区,满了的时候,就转移到发送缓冲区发送,本本份份的、按部就班的处理接收和发送,问题就解决了。

其实,在接收中断里面随手把收到的东东发回去,只是为了测试一下通路,实际应用中没有人会这样做。但是,仅仅是测试的时候多发了几个字符,没想到就能积累起误差,引起这么大的麻烦。看来,还是功夫不到家啊。

后记:
51单片机只有接收缓冲没有发送缓冲,在上一个字节没有发送完成就写入下一个字节当然会出问题,与误差积累没有关系。PIC系列接收发送都有缓冲,就不会出现这种问题。



PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /3 下一条