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

📄 usbmainold.c

📁 记录仪
💻 C
📖 第 1 页 / 共 5 页
字号:
					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 + -