急急急!!! 为什么单片机与电脑通讯 传到电脑的数据有些对的上有的对不上啊 求大神指点

2019-07-15 11:50发布

主程序在这  

void main(void)   // 主程序
{  
   uint distance_data,a,b;
   uchar CONT_1;  
   CLK_DIV=0X03; //系统时钟为1/8晶振(pdf-45页)
     P0M1 = 0;   //将io口设置为推挽输出
     P1M1 = 0;
     P2M1 = 0;
     P0M0 = 0XFF;
     P1M0 = 0XFF;
     P2M0 = 0XFF;
     i=0;
     flag=0;
         test =0;
         Trig=0;       //首先拉低脉冲输入引脚
         TMOD=0x11;    //定时器0,定时器1,16位工作方式

         TR0=1;             //启动定时器0
     IT0=0;        //由高电平变低电平,触发外部中断
         ET0=1;        //打开定时器0中断
         EX0=0;        //关闭外部中断
         EA=1;         //打开总中断0       
           ge=0xc0;
         shi=0xc0;
         bai=0xc0;
         qian=0xc0;
       
while(1)         //程序循环
        {
        EA=0;
            Trig=1;
        delay_20us();
        Trig=0;         //产生一个20us的脉冲,在Trig引脚  
        while(Echo==0); //等待Echo回波引脚变高电平
            succeed_flag=0; //清测量成功标志
            EX0=1;          //打开外部中断
                 TH1=0;          //定时器1清零
        TL1=0;          //定时器1清零
            TF1=0;          //
        TR1=1;          //启动定时器1
        EA=1;

        while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)  
                TR1=0;          //关闭定时器1
        EX0=0;          //关闭外部中断

        if(succeed_flag==1)
             {        
                   distance_data=outcomeH;                //测量结果的高8位
           distance_data<<=8;                   //放入16位的高8位
                   distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据
           distance_data*=12;                  //因为定时器默认为12分频
           distance_data/=58;                   //微秒的单位除以58等于厘米
         }                                      //为什么除以58等于厘米,  Y米=(X秒*344)/2
                                                               // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
       if(succeed_flag==0)
                {
            distance_data=0;                    //没有回波则清零
                           test = !test;                       //测试灯变化
        }

           a=distance_data;
       if(b==a) CONT_1=0;
       if(b!=a) CONT_1++;
       if(CONT_1>=10)
                   {
                      CONT_1=0;
                          b=a;
                          a<<=8;
                          a>>=8;
                          P1=a;

              TMOD=0X20;
                  TL1=0xfd; //波特率发生
                  TH1=0xfd;  
                  SCON=0xd8;
                  PCON=0X00;//波特率不加倍
              TR1=1;
                  ti=1;
                    if(b==0)putchar(0);                          
                   else if(b>900)putchar(1);
                    else if(b>800)putchar(2);
                     else if(b>700)putchar(3);
                      else if(b>600)putchar(4);
                                   else if(b>500)putchar(5);
                                    else if(b>400)putchar(6);
                                     else if(b>300)putchar(7);
                                      else if(b>200)putchar(8);
                                       else if(b>100)putchar(9);
                       else           putchar(10);                          
                          
                          conversion(b);
                          TMOD=0x11;
                        }                    
         }
}
//***************************************************************



b>260 电脑接收到的数据都是 对的   b<100是则显示61  不是应该显示10的吗    b>100时显示他显示ff 02  
260到300显示8 是对的 但是201到260 又显示0         

求大神 指点啊 是不是我的中断那弄错了啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。