⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 two18.c

📁 通过51单片机控制用sp2349扩展串口
💻 C
📖 第 1 页 / 共 5 页
字号:
       while(TI==0);                              //查询发送
       TI=0;
       }
      }
     else
      {
       AdrOut0=0;                                 //置串口2地址
       AdrOut1=1;
       SBUF=*sendline;                            //未发送完继续发送
       sendline++;                                //最后传出去的字节位置加一
       while(TI==0);                              //查询发送
       TI=0;
       }


      TIsign=3;                                    //置发零个数标志量为三


      while(TIsign!=0)                            //否则发零
       {
        AdrOut0=1;                                //置母串口地址
        AdrOut1=1;
        SBUF=0;                                   //发零
        --TIsign;
        while(TI==0);                            //查询发送                           2006 4 19
        TI=0;
        }


   }

}


//=====================================================
//定标子函数
//=====================================================
void calibration()                           //                                 2006 4 14
{
  uchar i;

 if(DBshort==1)
  {
   ST_ON=0;                              //关激活测距功能                                      2006 5 21

   ES=0;                                              //关串口中断                             2006  4 15
   C2=1;
   senddatas("$OK,RS",6);
   C2=0;

   for(i=0; i<100; i++)            //长延时                               740ms
   DelayUs(0x5FF);

   OI=0;
   senddatas("Y\r",3);

   for(i=0; i<100; i++)            //长延时                             740ms
   DelayUs(0xBFF);

   OI=0;
   senddatas("S10.9",5);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);


   for(i=0; i<100; i++)            //长延时                                740ms
   DelayUs(0xBFF);

   OI=0;
   senddatas("L109.4",6);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);

   for(i=0; i<100; i++)            //长延时                               740ms
   DelayUs(0xBFF);

   OI=0;
   senddatas("C",1);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);

   for(i=0; i<100; i++)            //长延时                               1500ms
   DelayUs(0xBFF);

   OI=0;
   senddatas("D",1);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("A",1);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);


   for(i=0; i<100; i++)            //长延时                               1970ms
   DelayUs(0x5FF);

   C2=1;
   senddatas("$S,END",6);
   C2=0;

   DBshort=0;                               //短距离定标无效标志                                     2006 5 21

   ES=1;                                     //开中断                                                2006 5 21

   }

 if(DBlong==1)                       //长距离定标                                                   2006 5 21
   {
   ES=0;

   C2=1;
   senddatas("$OK,RL",6);
   C2=0;

   for(i=0; i<100; i++)            //长延时                               740ms
   DelayUs(0x5FF);

   OI=0;
   senddatas("A",1);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);

   for(i=0; i<100; i++)            //长延时                               1500ms
   DelayUs(0xBFF);

   OI=0;
   senddatas("D",1);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("M",1);

   for(i=0; i<100; i++)
   DelayUs(0x5FF);

   OI=0;
   senddatas("\r",2);


   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);


   C2=1;
   senddatas("$L,END",6);
   C2=0;

   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);

   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);

   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);

   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);

   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);

   for(i=0; i<100; i++)            //长延时                                                     1970ms
   DelayUs(0xFFF);

   DBlong=0;                      //长距离定标无效标志                                          2006 5 21

   ST_ON=1;                       //激活测距功能有效                                            2006 5 21
   DB_ON=0;                       //定标无效                                                    2006 5 21

   ES=1;                          //开串口中断                                                  2006 4 15


   }

 }

//=====================================================
//激活子函数
//=====================================================
void restart()
{
 uchar i;

 if(ST_ON==1)                              //P1.2高电平                                 2006 4 14
  {
    if(resend1==1)                       //串口0 发送命令标志有效                          2006.3.31
      {
        ES=0;                               //禁止接收中断                                  2006 4 15

        C2=0;
        OI=0;                               //置串口0  地址                               2006.3.31
        senddatas("R\r",3);                  //中断方式发送发数据命令给测距仪            2006.3.31

        for(i=0; i<10; i++)                 //长延时                                74ms
        DelayUs(0x5FF);

        C2=0;
        OI=0;
        senddatas("M\r",3);

        for(i=0; i<10; i++)                //长延时                                74ms
        DelayUs(0x5FF);

        ES=1;                               //允许接收中断                                  2006 4 15
        resend1=0;                           //标志清零                                  2006.3.31
        ST_ON=0;                            //关激活标志
       }

    if(resend2==1)                        //串口1 发送命令标志有效                          2006.3.31
      {
       ES=0;                               //禁止串口中断                                  2006 4 15

       C2=0;
       OI=1;                               //置串口1  地址                               2006.3.31
       senddatas("R\r",3);                  //中断方式发送发数据命令给测距仪            2006.3.31
       OI=0;

       for(i=0; i<10; i++)             //长延时                                74ms
       DelayUs(0x5FF);

       C2=0;
       OI=1;
       senddatas("M\r",3);
       OI=0;

       for(i=0; i<10; i++)             //长延时                                74ms
       DelayUs(0x5FF);

       ES=1;                              //允许串口中断                                   2006 4 15
       resend2=0;                           //标志清零                                  2006.3.31
       ST_ON=0;                           //关激活标志
      }

   }

}
//=====================================================
//函数名称:cp_inbuf()
//功能描述:接收数据备份
//输入:*copyline   j
//输出:/
//全局变量: /
//调用模块: /
//=====================================================
void cp_inbuf(uchar *copyline,uchar j)
{
 uchar i;                                  //从接收缓存区取有效距离数据
 for(i=0;i<8;i++)
 {
  if(j==1)                                 //备份第一路数据
  copyinbuf1[i]=*copyline;
  if(j==2)                                 //备份第二路数据
  copyinbuf2[i]=*copyline;
  copyline++;
  }
}
//=====================================================
//函数名称:get_min()
//功能描述:比较两字符串,取较小值
//输入:/
//输出:/
//全局变量: sky
//调用模块: /
//=====================================================
void get_min()
{
 uchar i,t;                                                //字串大小比较标志前者大于后者取1反之取0
 t=0;
 sky=0;                                                    //默认第一路数据未对空               2006 3 20

 for(i=0;i<8;i++)
 {

  if(copyinbuf1[i]==copyinbuf2[i])
  continue;                                                //数值相等,继续检查

  if(copyinbuf1[i]>copyinbuf2[i])                          //前者大于后者,变量置1
   {
    t=1;
    break;
    }

  if(copyinbuf1[i]<copyinbuf2[i])                         //前者小于后者,变量置0
   {
    t=0;
    break;
    }

  }

  if(t)
  {
   for(i=0;i<8;i++)

   copyinbuf1[i]=copyinbuf2[i];                            //复制

   }

  if(copyinbuf1[0]=='1'&&copyinbuf1[1]=='0'&&copyinbuf1[2]=='0'&&copyinbuf1[3]=='0')//第一路数据值为1000.00M

   sky=1;                               //第二路数据或两路数据都对空                         2006 3 20



}
//=====================================================
//函数名称:JUDGE()
//功能描述:判决子程序
//输入:i  j
//输出:1 2 3 4 5 6 S ? ! *
//全局变量: sky  cutflag  cutcount  blankflag
//调用模块: /
//=====================================================
uchar JUDGE(float i,float j)
{
 float V,Vb,Vs,D,Dd,Ds;
 float t,tc;
 D=i;                                   //实际距离变量
 Dd=c;                                  //危险距离参量
 Ds=d;                                  //安全距离参量
 V=j;                                   //实际速度变量
 Vb=e;                                  //启动速度参量
 Vs=f;                                  //安全速度参量
 t=(D-V*0.027)/V;                       //实际距离与速度比变量                2006.3.6

 if(sky==1)                             //两路数据都对空                      2006 3 20
 return '6';                              //执行空操作                          2006 3 20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -