 |
在单片机与PC及通信时,低速率时(2400bps)很正常,提高速率则遇到以下问题:PC机向单片机发送数据没有问题, 但是单片机向PC机发送时产生误码, 速率越高, 误码越多, 加大PC机串口缓冲区并且加上校验都不行, 提高接收线程优先级也不行, 望各位高手指点。(cuidongwei)
|
| |
|
 |
PC机的波特率是将1.8432MHz的时钟输入频率采用分频的办法来得到要求的波特率,分频所用的除数是由CPU分两次写入除数锁存器的高位和低位,除数=1843200/(波特率X16)。单片机(以8031为例,串口工作方式3)波特率的设置由定时器1置方式2自动重新装入,波特率=2^SMOD×时钟振荡频率/(12×(2^N-TH1))/32。由于单片机晶振频率不是一些常用波特率的整数倍,分频后有误差,如采用特殊晶振如11.059MHz,则可降低误差,提高通信速率。
附:波特率误差
| 波特率 | PC除数值 | 8031TH1 | 误差 |
| 110 | 04 17 | 72 | 0.00% |
| 600 | 00 C0 | E6 | 0.16% |
| 1200 | 00 60 | F3 | 0.16% |
| 2400 | 00 30 | F9 | 6.09% |
| 3600 | 00 20 | FC | 8.51% |
| 4800 | 00 18 | FD | 8.51% |
lcl的意见:
正常情况下,9600BPS通讯的误码应该是可以容忍的,你说的情况有可能是使用232通讯,距离过大或干扰比较严重,此外你的PC软件也有关系,你应该确认你的程序1毫秒能扫描一次串口。
相关书籍:
《串行端口大全》
《Delphi 串口通信编程》
此问题由harpoon回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 网络与通信, network, communicate, com, com1, com2, DDK与硬件设备, hardware, ddk, vtoolsd, driver studio, winrt。
| |
|
| |
|
| |
|
| |
|
|
|
|
|