熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-12-28 14:08
正文摘要:用串口發(fā)送數(shù)據(jù),然后用串口助手接收數(shù)據(jù),但接收到的數(shù)據(jù)和程序里寫的數(shù)據(jù)不一樣,請問這是怎么回事?串口發(fā)送的數(shù)據(jù):uchar send[8]={0x01,0x03,0x00,0x00,0x00,0x02,0xC4,0x0B} 這是串口助手接收到的數(shù)據(jù):跟程 ... |
11樓說出了正解,鑒定完畢![]() |
波特率不對吧 |
仿真器一步一步調(diào)試啊 |
#include "all.h" bit Uart1_Flag=1; u8 code Uart1_Up_Symbol_Buffer[30]={"\r\n溫度: 遙控解碼: 超聲波:mm"}; u8 xdata Uart1_Up_Num_Buffer[10]; void Uart1_Init() { SM0=0; SM1=1; REN=1; //SCON|=0x50; PCON&=0x3f; AUXR|=0x01; AUXR|=0X14; T2H=0xfc; T2L=0xf3; ES=1; } void Uart1_Up_Data_Drive() { static u8 xdata count=0; if(Uart1_Flag) { Uart1_Flag=0; count++; switch(count) { case 1 : SBUF=Uart1_Up_Symbol_Buffer[0];break; case 2 : SBUF=Uart1_Up_Symbol_Buffer[1];break; case 3 : SBUF=Uart1_Up_Symbol_Buffer[2];break; case 4 : SBUF=Uart1_Up_Symbol_Buffer[3];break; case 5 : SBUF=Uart1_Up_Symbol_Buffer[4];break; case 6 : SBUF=Uart1_Up_Symbol_Buffer[5];break; case 7 : SBUF=Uart1_Up_Symbol_Buffer[6];break; case 8 : SBUF=Uart1_Up_Num_Buffer[0];break; case 9 : SBUF=Uart1_Up_Num_Buffer[1];break; case 10 :SBUF=Uart1_Up_Num_Buffer[2];break; case 11 :SBUF=Uart1_Up_Num_Buffer[3];break; case 12 : SBUF=Uart1_Up_Symbol_Buffer[7];break; case 13 : SBUF=Uart1_Up_Symbol_Buffer[8];break; case 14 : SBUF=Uart1_Up_Symbol_Buffer[9];break; case 15 : SBUF=Uart1_Up_Symbol_Buffer[10];break; case 16 : SBUF=Uart1_Up_Symbol_Buffer[11];break; case 17 : SBUF=Uart1_Up_Symbol_Buffer[12];break; case 18 : SBUF=Uart1_Up_Symbol_Buffer[13];break; case 19 : SBUF=Uart1_Up_Symbol_Buffer[14];break; case 20 : SBUF=Uart1_Up_Symbol_Buffer[15];break; case 21 : SBUF=Uart1_Up_Symbol_Buffer[16];break; case 22 : SBUF=Uart1_Up_Symbol_Buffer[17];break; case 23 : SBUF=Uart1_Up_Num_Buffer[5];break; case 24 : SBUF=Uart1_Up_Num_Buffer[6];break; case 25 : SBUF=Uart1_Up_Symbol_Buffer[18];break; case 26 : SBUF=Uart1_Up_Symbol_Buffer[19];break; case 27 : SBUF=Uart1_Up_Symbol_Buffer[20];break; case 28 : SBUF=Uart1_Up_Symbol_Buffer[21];break; case 29 : SBUF=Uart1_Up_Symbol_Buffer[22];break; case 30 : SBUF=Uart1_Up_Symbol_Buffer[23];break; case 31 : SBUF=Uart1_Up_Symbol_Buffer[24];break; case 32 : SBUF=Uart1_Up_Symbol_Buffer[25];break; case 33 : SBUF=Uart1_Up_Symbol_Buffer[26];break; case 34 : SBUF=Uart1_Up_Num_Buffer[7];break; case 35 : SBUF=Uart1_Up_Num_Buffer[8];break; case 36 : SBUF=Uart1_Up_Num_Buffer[9];break; case 37 : SBUF=Uart1_Up_Symbol_Buffer[27];break; case 38 : SBUF=Uart1_Up_Symbol_Buffer[28];break; case 39 :count=0;break; } } } void Uart1_Routine() interrupt 4 { static char Uart1_ser_n=0; if(RI) { RI=0; Uart1_Flag=1; if(SBUF==0x7f)//9600波特率 { Uart1_ser_n++; if(Uart1_ser_n>=10) { Uart1_ser_n=0; IAP_CONTR|=0xe0; } } } if(TI) { TI=0; Uart1_Flag=1; Uart1_Up_Data_Drive(); } } 一、以上代碼是STC15W的,可能需要修改定時(shí)器參數(shù)。 二、主函數(shù)while大循環(huán)前面初始化IO口和Uart1_Init(); 三、主函數(shù)每間隔大約500ms 執(zhí)行一次Uart1_Up_Data_Drive();這個(gè)函數(shù),確保數(shù)據(jù)能夠發(fā)送。 四、串口通信,電腦發(fā)送一個(gè)字節(jié)。才能讓單片機(jī)發(fā)送。 五、接收端波特率要正確,文本模式接收才能顯示漢字。 六、以上代碼由《人人學(xué)會(huì)單片機(jī)》視頻教程原創(chuàng),也就是我本人原創(chuàng),引用請備注代碼出處。 |
用仿真器一步一步調(diào)試,寄存器配置要按照單片機(jī)數(shù)據(jù)手冊配置好了才行 |
直接找個(gè)例程移植啊,不要糾結(jié)這些小玩意 |
把寄存器PCON修改為 PCON &= 0x7F; //波特率不倍速 通常是不加倍的。 |
wulin 發(fā)表于 2020-12-28 18:08 謝謝老哥指點(diǎn),謝謝指點(diǎn),小弟我再回去好好想想 |
老哥,串口助手點(diǎn)擊那個(gè)文本模式,hex模式看不懂的 |
上位機(jī)偶校驗(yàn),那串口配置就要用方式2 |
串口這點(diǎn)事學(xué)習(xí)一兩天就能搞定,你搞了一個(gè)多月還沒有搞定?測試串口功能只發(fā)不收不必開中斷。
|
Powered by 單片機(jī)教程網(wǎng)