串口的数据传送

2019-07-21 07:57发布

求一个在串口输入0--999 然后返回对应数值的串口

每次处理好了个位 十位百位就不对

百位对了 别的位有不对


ps:下面的是复制一位大佬的
下面是我学习后正在编写的串口接收工程文件
//--------
//串口接收,有串口接收数据时自动调用接收中断函数 USART1_IRQHandler(void)
//--------  
      if(USART_RX_STA&0x8000)                      //判断接收到的数据是否被调走,为1调走,调走后才能进入if下面的语句中进行新的数据接收,否则会出现误码。
                      {                                                                                                      
                      w=USART_RX_BUF[1]-48;            //用于返回PC字符提示信息
                      h=USART_RX_BUF[2]-48;             //用于返回PC字符提示信息    对照ascii码表,收到的数字为ascii码的对应1~9字符(对应十进制48~57),而不是十进制的1~9.
                      y=(USART_RX_BUF[0]-48);      //功能码                        ascii码表中字符的0~9与十进制的0~9相差48,所以要把字符的0~9转换成10进制的0~9就减去48.        
                     num=w+h+y;              //
                      USART_RX_STA=0;                 //重新接收
                      }




无论加不加48   这个串口都有问题


哪位做过的可以帮助啊一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
1157243379
1楼-- · 2019-07-21 13:29
大佬们解决一下 困惑好长时间了
1157243379
2楼-- · 2019-07-21 17:29
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 18:21
我们串口通信实验,稍微改下就可以出结果啊
1157243379
4楼-- · 2019-07-21 21:12
正点原子 发表于 2018-11-15 02:01
我们串口通信实验,稍微改下就可以出结果啊

   


        if(USART_RX_STA&0x8000)
                {                                          
                        len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度    0011  1111 1111 1111
                        printf(" 您发送的消息为: ");
                       
                       
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
                        }//USART_FLAG_TC是发送完成的表示符
                        printf(" ");
                        num0=USART_RX_BUF[0]-48;
                        num1=USART_RX_BUF[1]-48;
                        num2=USART_RX_BUF[2]-48;
                        if(num1<0)
                                num1+=48;
                        if(num2<0)
                                num2+=48;
                        num=num0*100+num1*10+num2*1;
                        USART_RX_STA=0;//串口的标志位
                        printf("num0=%lf ",num0);
                        printf("num1=%lf ",num1);
                        printf("num2=%lf ",num2);
                        printf("num=%lf ",num);               
                       
                }


这样只可以计算100-999啊
十位个位不对了  谢谢原子哥  
午夜狼嚎
5楼-- · 2019-07-21 23:25
不用那么计算吧, 直接用两个字节来表示0-999就可以了,比如你要发送555,就直接在串口发送02 2B就好了,单片机接收到以后将两字节拼接为u16型就可以了
mygod
6楼-- · 2019-07-22 01:21
str = "123"
atoi(str)
这样不是很好吗

一周热门 更多>