单片机串口通信调试程序的波特率设置问题

写了关于单片机与PC机之间的收发程序,用了串口调试工具,在发送过程中发现PC机收到的数据发生了偏差,我用的是12MHZ的晶振,没有11.0592MHZ的晶振。
比如我将SBUF的值给了P1口,P1接的是8个发光二极管,发送十六进制数AA,二极管理论上显示应该为亮灭亮灭....,实际上却发生了误差。
1.我想问一下,怎么样解决这个问题,用12MHZ的晶振怎样编程,怎样设置波特率?才能使PC机收到的数据不发生误差?
2.用12MHZ的晶振在串口调试发送数据时会发生偏差,那么为什么在正常的程序下载时程序没有出错?
我刚开始学习单片机,希望答案能详细一些,先谢谢了!

第1个回答  2009-04-29

看看我给你发的这个图,肯定能解决你的问题。SMOD=1,用2400的就没什么问题了,误差不要>10%一般都没问题。

第2个回答  2009-04-29
你要产生多高的波特率?你可以计算一下,12MHz来产生波特率,除了模式0之外,1200的整倍数的波特率都是有误差的。
第3个回答  2009-04-28
你把波特率设置低一点就没有问题了

用12M的是会有问题的本回答被网友采纳
第4个回答  2009-04-29
请把代码贴上来

单片机串口中波特率怎样设置?
单片机串行口工作方式有四种,用到定时器1的有两种,分别是方式1和方式3.这种情况下定时器被设置工作在方式2,不过波特率为4800bPS,对应的晶振频率应该是11.0592MHz,否则代入公式无法得到整数的TH1与TL1。若晶振频率为11.0592MHz时,SMOD=0,TH1=FAH,TL1=FAH,即可得到4800bps的波特率。如果允许波特率...

为什么单片机在做串口通信时,需要把波特率设置为9600?
是因为串口波特率高了, 误码率本来就会增大,但低了,就会速度降低,所以要选一个比较合适的啊,,就是正因为9600的比较合适啊

stc单片机串口数据不对
波特率设置错误。串口通信中的波特率设置必须匹配发送和接收端的设置,波特率不匹配,数据无法正确解析,确保发送端和接收端的波特率设置一致,以位\/秒(bps)为单位。

用51单片机串口实验时波特率怎么调才合适??我觉得是不是就给它调高点...
一般而言,波特率的高低与串口传输距离和使用环境有关,距离越远,波特率一般越低,使用环境干扰越大,波特率越低,如果是在同一块板上的串口通讯,可以做到很高,比如115200bps,另外最好使用11.0592M之类的晶振,这样标准波特率可以做到没有误差。通过我的使用经验,一般RS232传输距离在1米以内的话,11520...

单片机uart通讯中的UART通讯的波特率设置问题
--每秒可以发送10^6个数据位,这时候的波特率是1mbit\/s,--那么在数据传输时波特率岂不是要设为1000,但是常用的为什么没有1000?把它们混在一起讨论,是楼主的基本概念不清的表现。楼主所选的答案,也没有搞清串口方式0的特点,只是用 UART 的理论来解释《同步传送》。葫芦搅茄子而已,呵呵 ...

单片机串口通信调试程序的波特率设置问题
看看我给你发的这个图,肯定能解决你的问题。SMOD=1,用2400的就没什么问题了,误差不要>10%一般都没问题。

单片机串口通信的波特率什么意思,为何不同环境下一定要设置某一个...
波特率就好比一首歌曲的节奏,有了这个节奏,串行通讯的各个数据位就会有条不紊地依次排队一个一个地传到对方,要正确收发,两个通讯的主体的节奏必须一致,至于你说的不同环境我觉得,可以理解为:传输距离的远近,周围电磁干扰的强弱等等,当然距离越远、干扰越大波特率相应的要小,降低速度以提高传输的...

单片机波特率2400与电脑通信,使用串口调试助手,为啥助手的波特率设置为...
你串口的初始化有误,主要在定时器赋初值那里,应该这样才能得到2400的波特率(晶振14.7456MHz)void InitUART(void){ TMOD = 0x20;\/\/定时器T1工作方式2 SCON = 0x50;\/\/允许接收 TH1 = 0xF0;TL1 = TH1;PCON = 0x00;EA = 1;ES = 1;TR1 = 1;} ...

C8051F310单片机进行串口通信,我在波特率9600下正常,但是在115200下传输...
1、物理层的电平转换方面出了问题。所以第一步可以用示波器来查查。2、如果是单片机和单片机通信,相同配置,则可能串口服务程序全双工处理不当造成。3、如果是单片机和PC通信,串口中断服务程序全双工处理不当造成。还有可能115200配置不正确或速率差较大,可考虑用1+8+1+1,多一个停止位或者增加空闲位...

单片机串口通信 波特率已经相同了 为什么接收有差错?
从数据很明显看到出错的都是最高位,也就是帧内最后一个数据位,所以这是波特率误差累积导致的。检查你两边通讯的波特率设置参数,检查你的串口波特率计算过程和结果,检查你的单片机的时钟精度。

相似回答
大家正在搜