📄 usbmainold.c
字号:
packet_error(0xfb);
error=0;
len = D12_WriteEndpoint(5, 64,MainEpBuf2);
}
else
{
switch(recv_cmd)
{
case 0x81 :
trsdown_pin(); //下传驾驶员代码,和232共用一函数
break;
case 0x82 :
trsdown_vin(); //下传VIN,和232共用一函数
break;
case 0xc2 :
trsdown_time(); //下传当前时间,和232共用一函数
break;
case 0xc3 :
trsdown_tzxs(); //下传特征系数,和232共用一函数
break;
case 0xc4 :
trsdown_sdmx(); //下传速度门限,和232共用一函数
break;
case 0xE1:
trsdown_ini_info(); //下传初始安装信息(ID号+安装时间),和232共用一函数
break;
default:
break;
}
}
}
ENABLE;
}
if (bEPPflags.bits.ep2_txdone) //端点2发送数据完毕;
{
DISABLE;
switch(recv_cmd)
{
case 5:
trsusb_rate(360); //上载360小时速度
break;
case 7 :
trsusb_ydshj(); //上载疑点数据
break;
case 9 :
trsusb_rate(48); //上载2天速度
break;
case 0x11 :
trsusb_2dayover(); //上载2天超时
break;
case 0x0B:
trsusb_num_ydshj(); //上载带有驾驶证号码的疑点数据
break;
case 0x0E:
trsusb_num_rate(360); //上载驾驶员的流水记录
break;
case 0x0F:
trsusb_num_rate(48); //上载驾驶员的流水记录
break;
default:
break;
}
bEPPflags.bits.ep2_txdone = 0;
ENABLE;
}//if (bEPPflags.bits.ep2_txdone)
}
ES=1;
flag_trans=0;
return;
}
/*########################################################################################//
#//////////////////////////////////////////////////////////////////////////////////////////#
#///////////////////////// //////////////////////////////////#
#///////////////////////// 232 //////////////////////////////////#
#///////////////////////// //////////////////////////////////#
#//////////////////////////////////////////////////////////////////////////////////////////#
//########################################################################################*/
void trans_232(unsigned int len)
{
unsigned int xdata i;
unsigned char j;
Clr_WDog(); //清w-dog
for (i=0;i<len;i++)
{
Clr_WDog(); //清w-dog
j=MainEpBuf2[i];
TB8=(!P);
SBUF=j;
while(TI==0)
{
Clr_WDog(); //清w-dog
}
TI=0;
}
}
void isr_232(void) interrupt 4 using 3 //232的中断!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
unsigned char xdata c;
unsigned char temp,size;
Clr_WDog(); //清w-dog
clk_cnt=0;
if(RI)
{
temp=SBUF;
if((temp==0xaa)||recv_do)
{
flag_trans=2;
Buf_Empty=0x0;
recv_do=1;
c=temp;
if(P!=(!RB8))
{error=1;}
MainEpBuf[recv_ctr]=c;
verify=verify^c;
switch(recv_ctr)
{
case 0:
recv_beg1=temp; //起始字头的第1个字节
break;
case 1:
recv_beg2=temp; //起始字头的第2个字节
break;
case 2:
recv_cmd=temp; //命令字
break;
// case 3:
// recv_size0=temp;
// break;
case 4:
recv_size=temp; //数据块长度
break;
case 5:
recv_baoliu=temp; //保留字
break;
default:
break;
}
recv_ctr++;
if(recv_ctr>=7)
{
size=recv_size+7;
if(recv_ctr>=size)
{
recv_ctr=0x0;
Buf_Full=0x1; //命令字接受完毕
recv_do=0;
if(verify!=0)
{error=1;}
verify=0;
}
}
}//receive data;
RI=0;
}//if RI;
}
unsigned char packdata(unsigned int len)
{
// unsigned char i=6;
unsigned char j=0;
Clr_WDog(); //清w-dog
MainEpBuf2[0]=0x55;
j=MainEpBuf2[0];
MainEpBuf2[1]=0x7a;
j^= MainEpBuf2[1];
MainEpBuf2[2]=recv_cmd;
j^= MainEpBuf2[2];
MainEpBuf2[4]=len;
j^= MainEpBuf2[4];
MainEpBuf2[3]=len>>8;
j^= MainEpBuf2[3];
MainEpBuf2[5]=0x00;
j^= MainEpBuf2[5];
return j;
}
void packet_error(unsigned char errornum)
{
unsigned char xdata j;
Clr_WDog(); //清w-dog
MainEpBuf2[0]=0x55;
MainEpBuf2[1]=0x7a;
MainEpBuf2[2]=errornum;
MainEpBuf2[3]=0x00;
j=0x2f^errornum;
MainEpBuf2[4]= j;
}
//--------------------------------------------------------------------------------------上传当前驾驶员代码和驾驶证号码
void trs_num(void)
{
unsigned char xdata i=0,j=0;
unsigned long xdata id_long;
Clr_WDog(); //清w-dog
//将cur_id[]转换成16进制,上传
id_long=cur_id[0];id_long*=1000000;temp_long=id_long;
id_long=cur_id[1];id_long*=100000; temp_long+=id_long;
id_long=cur_id[2];id_long*=10000; temp_long+=id_long;
id_long=cur_id[3];id_long*=1000; temp_long+=id_long;
id_long=cur_id[4];id_long*=100; temp_long+=id_long;
id_long=cur_id[5];id_long*=10; temp_long+=id_long;
temp_long+=cur_id[6];
j=packdata(0x15);
MainEpBuf2[6]=temp_long>>16;
j=j^ MainEpBuf2[6];
MainEpBuf2[7]=temp_long>>8;
j=j^ MainEpBuf2[7];
MainEpBuf2[8]=temp_long;
j=j^ MainEpBuf2[8];
for(i=0;i<18;i++)
{ Clr_WDog(); //清w-dog
MainEpBuf2[i+9]=cur_id [i+7];
j=j^ MainEpBuf2[i+9];
}
MainEpBuf2[27]=j;
}
//-----------------------------------------------------------------------------------------------------上传当前时间
void trs_clk(void)
{
unsigned char xdata j;
Clr_WDog(); //清w-dog
REN=0;
j=packdata(0x06);
MainEpBuf2[6]=OLD_YEAR;
j=j^ MainEpBuf2[6];
MainEpBuf2[7]=OLD_MONTH;
j=j^ MainEpBuf2[7];
MainEpBuf2[8]=OLD_DAY;
j=j^ MainEpBuf2[8];
MainEpBuf2[9]=OLD_HOUR;
j=j^ MainEpBuf2[9];
MainEpBuf2[10]=OLD_MIN;
j=j^ MainEpBuf2[10];
MainEpBuf2[11]=OLD_SEC;
j=j^ MainEpBuf2[11];
MainEpBuf2[12]=j;
}
//-----------------------------------------------------------------------------------------------------上传360小时里程
void trs_lich(void)
{
unsigned char xdata i=0;
unsigned char xdata j=0;
Clr_WDog(); //清w-dog
j=packdata(8);
for(i=0;i<3;i++)
{
MainEpBuf2[i+6]=lichen_360h[i];
j^= MainEpBuf2[i+6];
Clr_WDog(); //清w-dog
}
MainEpBuf2[9]=OLD_YEAR;
j=j^ MainEpBuf2[9];
MainEpBuf2[10]=OLD_MONTH;
j=j^ MainEpBuf2[10];
MainEpBuf2[11]=OLD_DAY;
j=j^ MainEpBuf2[11];
MainEpBuf2[12]=OLD_HOUR;
j=j^ MainEpBuf2[12];
MainEpBuf2[13]=OLD_MIN;
j=j^ MainEpBuf2[13];
MainEpBuf2[14]=j;
}
//-----------------------------------------------------------------------------------------------------上传特征系数
void trs_tzxs(void)
{
unsigned char xdata i=0,j=0;
Clr_WDog(); //清w-dog
j=packdata(3);
// v_test[0]=jj;
for(i=0;i<3;i++)
{ Clr_WDog(); //清w-dog
MainEpBuf2[i+6]=tzxs[i];
j= j^tzxs[i];
}
MainEpBuf2[9]=j;
}
//-----------------------------------------------------------------------------------------------------上传速度数据
void trs_rate(unsigned int xiaoshi)
{
unsigned char i,j,k;
unsigned int l;
Clr_WDog(); //清w-dog
ptr_temp=ptr_stp_min; //把停车时记录指针复制给临时指针
if(flag_wr_empty==0) //数据区为空,则发空数据包
{
j=packdata(0); //发送0字节的数据包
MainEpBuf2[6]=j;
trans_232(7);
return;
}
if(flag_wr_full==1) //已写满数据区
{
if(xiaoshi==360) trstimes_temp=360; //360小时,则从当前字节开始上传
else
{
//先指向48小时前的数据
if(ptr_temp>=0x1c30) //已超过48小时记录
ptr_temp-=0xc30;
else
{
temp1_all=ptr_temp;
ptr_temp=0x4F38+temp1_all; //ptr_temp=0x6b68-(0xc30-(temp1_all-0x1000))=0x4F38+temp1_all
}
trstimes_temp=48;
}
}
else //未写满数据区
{
if(xiaoshi==360)
{
temp1_all=ptr_temp;
trstimes_temp=(temp1_all-0X1000)/65;
ptr_temp=0x1000;
}
else
{
if(ptr_temp>=0X1C30) //已超过48小时记录
{
//先指向48小时前的数据
ptr_temp-=0XC30;
trstimes_temp=48;
}
else //未超过48小时记录
{
temp1_all=ptr_temp;
trstimes_temp=(temp1_all-0X1000)/65;
ptr_temp=0x1000;
}
}
}
j=packdata(trstimes_temp*65);
trans_232(6);
for(l=0;l<trstimes_temp;l++)
{ Clr_WDog(); //清w-dog
for(i=0;i<65;i++)
{ Clr_WDog(); //清w-dog
P11=0;
P10=0;
k=*ptr_temp;
ptr_temp++;
P11=1;
P10=1;
MainEpBuf2[i]=k;
j^=k;
}
if(ptr_temp>=0X6B68) ptr_temp=0X1000;
trans_23
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -