单片机串口传送 晶振是24M的除了9600波特率,其他波特率均不能正常显示在串口调试助手里

#include<reg52.h>

void main(void)
{
RCAP2H=(65536-11059200/32/14400)>>8;
RCAP2L=(65536-11059200/32/14400)&0Xff;
T2CON=0X34;
SCON=0X50;
ES=1;

EA=1;

while(1);
}
unsigned char temp;
void serial_int(void) interrupt 4
{
if(RI)
{
RI=0;
temp=SBUF;
SBUF=temp;
while(!TI);
TI=0;
}
}
单片机串口传送 晶振是24M的除了9600波特率,其他波特率均不能正常显示在串口调试助手里,换成11.0592的我试了一下9600 和14400能传送,其他的也不能正常显示,为什么呢?高手们给指点一下

51单片机,用12或24MHz的晶振,串口通信时波特率误差是很大的啊!比如24MHz时,单片机定时器实际使用的信号频率是2MHz,用T2定时器做波特率发生器产生9600的波特率,得到的参数是6.51,所以你取65530或者65529时误差都大的惊人,得到的实际波特率是10416和8928。

要想得到准确的9600波特率,只能选用11.0592、18.432或者22.1184这样的晶振。追问

用11.0592 除了9600波特率也不能正常回传到串口调试助手啊,请问为什么呢

追答

你的程序有问题!
SBUF=temp;
while(!TI);
TI=0;
在中断里还使用查询方式发送数据?

追问

发送用查询 接收用中断,这个没问题的,现在的问题是为什么换别的波特率就不能正常发送

追答

那再仔细看T2作为波特率发生器时的注意事项了,我试验的还没遇到这种问题。

追问

改成T1也一样的,你可以把程序放你的单片机里看看

追答

中断程序的写法;
void serial_int(void) interrupt 4
{
if(RI)
{
RI=0;
//其他程序
}
if(TI)
{
TI=0;
//其他程序
}
}

如果波特率高的时候通信不正常,那就只有怀疑MAX232的电路有没有问题了。我以前遇到过,如果MAX232用的电容偏小,高波特率的通信就不成功。一般电容用1uF。

温馨提示:内容为网友见解,仅供参考
无其他回答

单片机串口传送 晶振是24M的除了9600波特率,其他波特率均不能正常显...
51单片机,用12或24MHz的晶振,串口通信时波特率误差是很大的啊!比如24MHz时,单片机定时器实际使用的信号频率是2MHz,用T2定时器做波特率发生器产生9600的波特率,得到的参数是6.51,所以你取65530或者65529时误差都大的惊人,得到的实际波特率是10416和8928。要想得到准确的9600波特率,只能选用11.0592...

51单片机工作在24M晶振时的串口如何设置?波特率9600
24M有误差的。可以选22.1184M,9600bps,T1初值设为184,SCON=80H,SMOD=0

单片机波特率与其它设备波特率不一致,导致传输数据不对
一般来说51的UART串口19200就足够快了,因为51的串口本来就是异步的,波特率高了就很容易出错,一般工业上9600是最常用的,在高就很有可能出这样或者那样的问题了。不需要这么高的速率,就别用这么高的波特率,如果确实数据量很大,就试试SPI或者CAN等数据总线吧,同步的总归比异步的稳定。

...的可以准确的发送和收回数据,其他波特率都不能正确的发送和收回数...
因为,串口通信是两者的异步通信,如果两者的波特率不相同,就无法正确通信的。这就是串口通信波特率不能任何取值的原因。

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

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

关于单片机串口波特率和串口小助手波特率的问题
当单片机收到串口发过去的数据之后会进入串口中断ser函数 void ser() interrupt 4 { RI=0;\/\/清除串口标志位 a=SBUF;\/\/保存接收到的值到变量a 如果电脑发送的是9a此时a变量中的值就是9a;flag=1;\/\/接收标记置1 } 再返回主函数的时候 if(flag==1)\/\/flag已经在中断里面置为1了 所以条件成立...

单片机串口设的波特率是9600,但是在电脑串口调试程序中设成19200才能收...
这个不可能的把,波特率不对接收不了数据,甚至数据出错的,

51单片机串口问题,波特率设置问题
看你后面所问的, 问题是出在优先级上了,单目运行符的优先级最高,比如+、-、!、~、*(指针)……,如果要让最终计算结果取反,就应该全部计算完成后再取反,也相当于用0减去那个数,跟用256减是一样的 TH1是8位寄存器 单片机C语言中计算时尤其要注意数据溢出和运算优先级的问题 最好的方法就...

我想问关于串口传输波特率的问题
看看你的晶振是多少的了 然后用算波特率的公式或者小程序试试误差在0%的那几个波特率试试 有可能晶振的误差导致传输乱码 检查一下串口线也有必要

相似回答