关于51单片机通过串口发送多位数的问题,想了一天一夜了T T

2019-07-15 14:44发布

各位大神,请问你们有做过51单片机串口通信把多位数发送给电脑的操作吗? 我把num的数据分拆开六个数然后转换成ascii码保存到数组里面,但是输送到电脑却是完全不一样的六个数。当我把num的位数减到三位,例如让num=345时[img=0,1]file:///C:Users浩恩DocumentsTencent Files754766991ImageC2C1O6PU$92Z@HK0WODS0DZ[Y0.jpg[/img]它却可以正常输出345,超过三位他就变了,请问你知道这是怎么回事吗?波特率选取9600,选其他会乱码
QQ图片20160318094220.jpg
QQ图片20160318094435.png

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define N 6                                                        //可一次接收数据量
  5. void rs232_init();
  6. uchar flag,i,d,num;
  7. uint n;                                                      //删除无用变量                           
  8. uchar table[6];
  9. uchar table1[N];                                              //接收缓存数组
  10. uchar j=0;                                                             //接收计数器
  11. //sbit led=P1^0;
  12. main()
  13. {
  14.          rs232_init();
  15.          while(1)
  16.          {
  17.                          //        num++;
  18.                                 n=100000;num=348965;
  19.                                 for(i=0;i<6;i++)
  20.                          {                                                                
  21.                                                     d=(int)(num/n);
  22.                                                         num=(int)(num-n*d);
  23.                                                         d=(char)(d+0x30);
  24.                                                        
  25.                                                         n=n/10;
  26.                             table[i]=d;
  27.                                                   }
  28.                  if(flag==1)
  29.                  {
  30.                          ES=0;
  31.                          for(i=0;i<6;i++)
  32.                          {
  33.                                  SBUF=table[i];
  34.                                  while(!ti);
  35.                                  TI=0;
  36.                          }
  37.                          for(j=0;j<N;j++)                        //发送接收数组
  38.                                                  {
  39.                                                          SBUF=table1[j];
  40.                                  while(!TI);
  41.                                  TI=0;
  42.                                                 }
  43.                          j=0;                                           //清零接收计数器
  44.                          ES=1;
  45.                          flag=0;
  46.                  }               
  47.          }
  48. }
  49. void rs232_init()
  50. {
  51.          TMOD=0x20;
  52.          TH1=0xfd;
  53.          TL1=0xfd;
  54.          TR1=1;
  55.          SM0=0;
  56.          SM1=1;
  57.          REN=1;                                                        //先设定号工作方式,在打开允许接收
  58.          EA=1;
  59.          ES=1;        
  60. }
  61. void ser()interrupt 4
  62. {                 
  63.                 RI=0;
  64.                 table1[j++]=SBUF;                                //存数据到接收缓存
  65.                 if(j==N)                                                //数组满时,允许发送
  66.                 flag=1;
  67. }
复制代码



QQ图片20160318094334.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。