15942379927 发表于 2018-11-13 15:38 你的意思 就是 我 把receiveData=='1' 这里的1 改成0x0a吗?这样可以,但是并没有解决返回值是乱码的问题。。 现在问题的原因找到了,就是Read_AD_Data(0xE4)返回的是数字,而串口传过去的是字符串,所以就是乱码了。但是我不知道怎么写。。 我尝试用数组把数字摘出来 ,一个一个传 void Usart() interrupt 4 { u8 receiveData; u8 str[4]; u8 i; u8 j; if(RI == 1) { RI = 0;//清除接收中断标志位 receiveData=SBUF;//储存接收到的数据 for(j=1;j<5;j++) { if(receiveData=='1') { i=Read_AD_Data(0xE4); str[1]=i/1000+48; str[2]=i%1000/100+48; str[3]=i%1000%100/10+48; str[4]=i%1000%100%10+48; SBUF=str[j]; } else { SBUF=receiveData; } } } while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 } 但是这样也不对。。。 |
guangshi_wq 发表于 2018-11-13 14:42 Read_AD_Data(0xE4) 这个里面就是0-4095,一共4096个数,是我采直线电位计的返回值。。。现在确定就是中断这块的问题,而且是 Read_AD_Data(0xE4) 里面的数字和字符串之间的矛盾,如果我把 Read_AD_Data(0xE4) 改成48,那么串口助手上的返回值就是0。。。。但是现在关键是 不知道这里怎么处理。 |
| 你可以试一试用八位的码去验证 比如说0x0a 是1 0x0b是2 。。。。。无非就是在case那里改一下 |
1貌似跟停止位重复了 ,串口分不清楚到底是数据位还是停止位 我的分析![]() |
|
SBUF=Read_AD_Data(0xE4); 没有看见你的子涵数。不知道怎么调用啊。 |
| 为什么没人来,能不能把这个贴子转到问答区啊 |
| 没人吗?呃 |