有乱码是正常的,只要不是每次都是乱码,我的经验就是,在发送端把要发的数据*2发送,然后在接收断做个判断,错的就直接舍去,然后就留下没有乱码的了 |
STCSTC 发表于 2017-9-15 12:43 谢谢大佬,看了你的程序后,我就把for循环改了一下,把for(i=6;i>=0;i--)改成了for(i=0;i<7;i++)然后就能正确就收数据了,但是我还是不明白,这两个明显是一个意思呀,为什么结果却不同呢 |
笨笨兔 发表于 2017-9-15 09:58 晶振是11.0592MHz,波特率4800 |
本帖最后由 STCSTC 于 2017-9-15 13:01 编辑 #include<reg51.h> unsigned char SendTemp[7]; void UartInit(void) //4800bps@11.0592MHz { TMOD = 0x20; SCON = 0x50; TH1 = 0xFA; TL1 = TH1; PCON = 0x00; TR1 = 1; } void Delay100ms() //@11.0592MHz { unsigned char i, j; i = 180; j = 73; do { while (--j); } while (--i); } void UsartSend(unsigned int temp) { unsigned char i; SendTemp[0]=temp/10000 + 48; //百位 SendTemp[1]=temp % 10000 / 1000 + 48; //十位 SendTemp[2]=temp % 1000 / 100 + 48; //个位 SendTemp[3]='.'; SendTemp[4]=temp % 100 / 10 + 48; //十分位 SendTemp[5]=temp % 10 + 48; //百分位 SendTemp[6]='\n'; for(i=0;i<7;i++) { SBUF=SendTemp; while(!TI); //等待发送完成 TI=0; } } void main() { UartInit(); while(1) { UsartSend(12345); Delay100ms(); } } |
串口发送.JPG (15.48 KB, 下载次数: 57)
你看一下波特率,包括串口助手 |
你用的是多少 Mhz 的晶体呢? 估计是波特率不合适。 |