![]() |
發布時間: 2020-12-28 14:08
正文摘要:用串口發送數據,然后用串口助手接收數據,但接收到的數據和程序里寫的數據不一樣,請問這是怎么回事?串口發送的數據:uchar send[8]={0x01,0x03,0x00,0x00,0x00,0x02,0xC4,0x0B} 這是串口助手接收到的數據:跟程 ... |
11樓說出了正解,鑒定完畢![]() |
波特率不對吧 |
仿真器一步一步調試啊 |
#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的,可能需要修改定時器參數。 二、主函數while大循環前面初始化IO口和Uart1_Init(); 三、主函數每間隔大約500ms 執行一次Uart1_Up_Data_Drive();這個函數,確保數據能夠發送。 四、串口通信,電腦發送一個字節。才能讓單片機發送。 五、接收端波特率要正確,文本模式接收才能顯示漢字。 六、以上代碼由《人人學會單片機》視頻教程原創,也就是我本人原創,引用請備注代碼出處。 |
用仿真器一步一步調試,寄存器配置要按照單片機數據手冊配置好了才行 |
直接找個例程移植啊,不要糾結這些小玩意 |
把寄存器PCON修改為 PCON &= 0x7F; //波特率不倍速 通常是不加倍的。 |
wulin 發表于 2020-12-28 18:08 謝謝老哥指點,謝謝指點,小弟我再回去好好想想 |
老哥,串口助手點擊那個文本模式,hex模式看不懂的 |
上位機偶校驗,那串口配置就要用方式2 |
串口這點事學習一兩天就能搞定,你搞了一個多月還沒有搞定?測試串口功能只發不收不必開中斷。
|