📄 two18.c
字号:
}
if(r_flag1==1&&data_number1<16) //特殊情况下T0中断位于接收中断之间(包含错误接收情况)
{
warning1++;
if(warning1==2) //确定发生错误
{
r_flag1=0; //接收标志量清零
data_number1=0; //接收个数标志清零
warning1=0; //次数清零
inlast1=inbuf1; //指针指向缓存首址
inbufful1=0; //置缓冲区空标志
no1come1=0; // 2006 3 20
}
}
if(r_flag2==1&&data_number2<16) //特殊情况下T0中断位于接收中断之间(包含错误接收情况)
{
warning2++;
if(warning2==2) //确定发生错误
{
r_flag2=0; //接收标志量清零
data_number2=0; //接收个数标志清零
warning2=0; //次数清零
inlast2=inbuf2; //指针指向缓存首址
inbufful2=0; //置缓冲区空标志
no2come2=0; // 2006 3 20
}
}
//==================================================
//刹车、断油控制
//==================================================
if(cutflag==1) //如果断油标志有效
{
--cutcount;
if(cutcount==100) //断油时间段计数,且断油时间达0.5s
{
brakeflag=1; //置刹车标志有效
brakecount=101; //刹车定时时间置初值,定时0.5s
brakestatus=21; //刹车定时周期0.06秒,高低电平时间等长 2006.3.9
// door2=1; //门2开
stop=0; //刹车状态有效 2006 3 9
// alarm=1; //报警 2006 3 16
}
if(brakeflag==1)
{
--brakecount;
if(brakecount==0)
{
door1=1; //门1开
cutflag=0; //断油结束标志
brakeflag=0; //刹车结束标志
blankflag=1; //恢复正常状态标志有效
blankcount=8; //恢复正常定时时间置初值,定时0.06s
}
//==================================================
//ABS刹车控制,16.67Mhz
//==================================================
--brakestatus;
if(brakestatus==0) //定时时间到 2006 3 9
{
if(stop==0)
{
brakestatus=10; //置初值 2006 3 9
stop=1;
}
if(stop==1)
{
brakestatus=20;
stop=0;
}
// stop=!stop; //状态取反 2006 3 9
}
}
}
//==================================================
//恢复正常段
//==================================================
if(blankflag==1) //恢复正常标志有效
{
--blankcount; //
if(blankcount==0) //定时时间到
blankflag=0; //恢复正常状态结束
}
//==================================================
//数据接收频率控制
//==================================================
if(--no1count==0) //第一路接收频率计数标志到零 2006 3 20
{
no1wrong1=1; //第一路数据出错标志有效 2006 3 20
no1come1=1; //第一路数据到达标志有效 2006 3 20
}
if(no1come1==1) //第一路数据到达 2006 3 20
{
no1come1=0; //到达标志清零 2006 3 20
no1count=10; //接收频率计数标志置初值,定时0.1s(10hz) 2006 3 20
}
//===================================================
//
//===================================================
if(--no2count==0) //第二路接收频率计数标志到零 2006 3 20 2006 3 20
{
no2wrong2=1; //第二路数据出错标志有效 2006 3 20 2006 3 20
no2come2=1; //第二路数据到达标志有效 2006 3 20
}
if(no2come2==1) //第二路数据到达 2006 3 20
{
no2come2=0; //到达标志清零 2006 3 20 2006 3 20
no2count=10; //接收频率计数标志置初值,定时0.1s(10hz) 2006 3 20 2006 3 20
}
//==================================================
//发送命令给测距仪,超过定时时间无数据,使其重发数据
//==================================================
//子串口0
if(no1wrong1==0) //数据正确,置定时时间20秒
no1wrong1count=2000;
if(no1wrong1==1) //定时20秒时间内,无数据,置发送命令标志为1
{
if(--no1wrong1count==0)
{
no1wrong1count=2000; //置定时初值
ST_ON=1; //激活有效
resend1=1; //置重发标志
}
}
//子串口1
if(no2wrong2==0) //数据正确,置定时时间20秒
no2wrong2count=2000;
if(no2wrong2==1) //定时20秒时间内,无数据,置发送命令标志为1
{
if(--no2wrong2count==0)
{
no2wrong2count=2000; //置定时初值
ST_ON=1; //激活有效
resend2=1; //置重发标志
}
}
//==================================================
//定标2秒定时
//==================================================
/* if(Twosecflag==1) // 2006 4 14
{
if(--Twoseccount==0) //定时时间到
{
if(int0count>=2) //中断次数为二
{
DBshort=0; //点亮红灯
Twosecflag=0; //清定时标志
int0count=0; //清中断次数
}
else //次数为一
{
DBlong=0; //点亮绿灯
Twosecflag=0; //清定时标志
int0count=0; //清中断次数
}
}
} */ // 2006 4 14
//==================================================
//报警控制
//==================================================
/* if(alarmlevel==1) //一级报警,周期1秒
{
--alarmcount; //定时计数减一
if(--alarmstatus==0) //定时状态至零,状态反转
{
alarmstatus=50;
alarm=!alarm;
}
if(alarmcount==0) //计数定时到,取消报警级别,关报警
{
alarmlevel=0;
alarm=0;
}
}
if(alarmlevel==2) //二级报警,周期0.8秒
{
--alarmcount;
if(--alarmstatus==0)
{
alarmstatus=40;
alarm=!alarm;
}
if(alarmcount==0)
{
alarmlevel=0;
alarm=0;
}
}
if(alarmlevel==3) //三级报警,周期0.6秒
{
--alarmcount;
if(--alarmstatus==0)
{
alarmstatus=30;
alarm=!alarm;
}
if(alarmcount==0)
{
alarmlevel=0;
alarm=0;
}
}
if(alarmlevel==4) //四级报警,周期0.4秒
{
--alarmcount;
if(--alarmstatus==0)
{
alarmstatus=20;
alarm=!alarm;
}
if(alarmcount==0)
{
alarmlevel=0;
alarm=0;
}
}
if(alarmlevel==5) //五级报警,周期0.1秒
{
--alarmcount;
if(--alarmstatus==0)
{
alarmstatus=10;
alarm=!alarm;
}
if(alarmcount==0)
{
alarmlevel=0;
alarm=0;
}
}
if(alarmlevel==6) //五级报警,周期0.1秒
{
--alarmcount;
if(--alarmstatus==0)
{
alarmstatus=5;
alarm=!alarm;
}
if(alarmcount==0)
{
alarmlevel=0;
alarm=0;
}
} */
}
//============================================================================================
//结束
//============================================================================================
//=====================================================
//延时
//=====================================================
void DelayUs(unsigned int delay_tmp) //延时N us
{
while(delay_tmp)
delay_tmp--;
}
//=====================================================
//定标按键,外中断0,电平触发
//=====================================================
/* void int0(void) interrupt 0 // 2006 4 14
{
uchar i;
if(dial==0) //
{ //中断次数加一
int0count++; //中断次数为一,置两秒定时初值
if(int0count==1)
{
Twosecflag=1;
Twoseccount=200;
}
for(i=0; i<30; i++) //延时210ms
DelayUs(0x5FF);
}
}
*/
//=====================================================
//函数名称:INT2ASCII() 浮点化字符
//功能描述:浮点型数据化为字符串型
//输入: j 浮点型
//输出:/
//全局变量: /
//调用模块: /
//=====================================================
void INT2ASCII(float j)
{
uchar i;
uint v;
i=0;
v=(uint)(j*10); //浮点数值扩大10倍并化浮点为整型
BUF2[i++]=(v/10000+0x30); //取千分位
BUF2[i++]=((v%10000)/1000+0x30); //取百分位
BUF2[i++]=((v%1000)/100+0x30); //取十分位
BUF2[i++]=((v%100)/10+0x30); //取个位
BUF2[i++]='.';
BUF2[i++]=(v%10+0x30); //取小数点后一位小数
BUF2[i++]='0'; //小数点后第二位添零
BUF2[i++]='M'; //以'M'作为串尾
}
//=====================================================
//函数名称:putbytes() 中断发送
//功能描述:放一串数据到发送缓冲区
//输入:*outplace j
//输出:/
//全局变量: outbufsign
//调用模块: /
//=====================================================
putbytes(unsigned char *outplace,unsigned char j)
{
int i;
for(i=0;i<j;i++)
{
*putlast=*outplace; //放字节进入缓冲区
putlast++; //入指针加一
outplace++; //字符串指针加一
if(putlast==outbuf+OLEN)putlast=outbuf; //指针到了顶部换到底部
}
if(!outbufsign)
{
outbufsign=1;
TI=1;
} //缓冲区开始为空,置为“有”标志,启动发送
}
//=====================================================
//查询发送命令
//=====================================================
senddatas(uchar *sendline,uchar j)
{
uchar i;
for(i=0;i<j;i++)
{
if(C2==0)
{
if(OI==0) //如果发给串口0
{
AdrOut0=0; //置串口0地址
AdrOut1=0;
SBUF=*sendline; //未发送完继续发送
sendline++; //最后传出去的字节位置加一
while(TI==0); //查询发送 2006 4 19
TI=0;
}
else
{
AdrOut0=1; //置串口1地址
AdrOut1=0;
SBUF=*sendline; //未发送完继续发送
sendline++; //最后传出去的字节位置加一
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -