![]() |
發布時間: 2017-9-14 21:02
正文摘要:各位大佬,一個簡單的串口發送程序,代碼如下 void main() { UartInit(); while(1) { UsartSend(12345); &nbs ... |
有亂碼是正常的,只要不是每次都是亂碼,我的經驗就是,在發送端把要發的數據*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 的晶體呢? 估計是波特率不合適。 |