📄 two18.c
字号:
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'&©inbuf1[1]=='0'&©inbuf1[2]=='0'&©inbuf1[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 + -