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 |
串口这点事学习一两天就能搞定,你搞了一个多月还没有搞定?测试串口功能只发不收不必开中断。
|