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

📄 test2.c

📁 实现mega8的isp操作
💻 C
📖 第 1 页 / 共 2 页
字号:
{
 	 unsigned char jk,k,CRC,temp;
	 CLI();
	EEPROMReadBytes(0, SendSbuf, 18);
	CRC=0;
	
	if(SendSbuf[0]=='S')
	{
	 		if(!(SendSbuf[12]-0x31)) //频率选择
			{
			    PORTD|=(1<<PD4);  //CS=1;
			}
			else
			    PORTD&=0XEF; //PD4=0;CS=0';
			 
			
			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
			else  SendSbuf[15]=0;   //停止
			
			//发送:T-001-015<CRC> /\: T-001-015<CRC>G  --最后车发送
			//--求车辆等待时间 ---
			NowSend=SendSbuf[4]-0x30;
			NowSend*=10;
			NowSend+=(SendSbuf[5]-0x30);
			//NowSend*=10;
			NowSend+=(SendSbuf[6]-0x30);
			
			NowSend*=36;
			NowSend+=1000;
			NowSend2=NowSend;
			
	 		for(jk=2;jk<5;jk++)  //把要发送的放在发送上
			{
			  // SendSbuf[jk]=SendSbuf[jk+2];
			   //CRC^=SendSbuf[jk];
			   temp=SendSbuf[jk+6];
			   k=2*(jk-1);
			   SendSbuf[k]=(temp>>4)+0x30;
			   CRC^=SendSbuf[k];
			   SendSbuf[k+1]=(temp&0x0f)+0x30;
			   CRC^=SendSbuf[k+1];
			   
			 }
			 
			SendSbuf[10]=CRC;  //jk=9;
			SendSbuf[11]=SendSbuf[15];
			SendSbuf[12]=0;
			//-----
			SendSbuf[0]='T';
			SendSbuf[1]='-';
			
			
			
	}//end  if(SendSbuf[0]=='S')
	else{  //没有时候的默认值SET-001-000-0,1号车
	       jk=0;
	        SendSbuf[jk++]='T';
			SendSbuf[jk++]='-';
			SendSbuf[jk++]='0';
			SendSbuf[jk++]='0';
			SendSbuf[jk++]='1';
			SendSbuf[jk++]='-';
			SendSbuf[jk++]='0';
			SendSbuf[jk++]='0';
			SendSbuf[jk++]='0';
			SendSbuf[jk++]='-';
			SendSbuf[jk++]='0';
			SendSbuf[jk++]='N';
			
			NowSend=2000;///???????????????????????????
			NowSend2=NowSend;
			
			PORTD&=0XEF; //PD4=0;CS=0';
	
	}
	
  SEI();
}
void WRITEEEPROM()
{
 	 unsigned char jk,CRC,IDX,temp,k;
	 CLI();
	EEPROMWriteBytes(0, ReceiveSbuf, 18);
	sdelay(200);
	EEPROMReadBytes(0, SendSbuf, 18);
	CRC=0;
	
	if(SendSbuf[0]=='S')
	{
	 		if(!(SendSbuf[13]-0x31))  //频率选择
			{
			     PORTD|=(1<<PD4);  //CS=1;
			}
			else
			   PORTD&=0XEF; //PD4=0;CS=0';
//---确定等待时间----//
			
			NowSend=SendSbuf[4]-0x30;
			NowSend*=10;
			NowSend+=(SendSbuf[5]-0x30);
			NowSend*=10;
			NowSend+=(SendSbuf[6]-0x30);
			//NowSend+=10;  //延时后志发送
			NowSend*=36;
			NowSend+=1000;
			NowSend2=NowSend;

//-------------			   

			
			
			if(SendSbuf[14]=='G')SendSbuf[15]='G';//最后的
			else  SendSbuf[15]=0;   //停止
			
			//发送:T-001-015<CRC> /\: T-001-015<CRC>G  --最后车发送
//	 		for(jk=0;jk<9;jk++)  //把要发送的放在发送上
//			{
	//		   SendSbuf[jk]=SendSbuf[jk+2];
//			   CRC^=SendSbuf[jk];
	//		 }
//------------------写 IC 卡= 司机号--------
         //  I2C_Write(0,0X33); 12,14,16 IC卡存放处
		 if(!(PIND&0X08)) // IC IN 
		 {
		   IDX=SendSbuf[6];
		   I2C_Write(12,IDX);
		     sdelay(200);
		   IDX=SendSbuf[7];
		   I2C_Write(14,IDX);
		      sdelay(200);
		   IDX=SendSbuf[8];
		   I2C_Write(16,IDX);
		      sdelay(200);
		 }
		 
//-----------------------------------------


	 		for(jk=2;jk<5;jk++)  //把要发送的放在发送上
			{
			 
			   temp=SendSbuf[jk+6];
			   k=2*(jk-1);
			   SendSbuf[k]=(temp>>4)+0x30;
			   CRC^=SendSbuf[k];
			   SendSbuf[k+1]=(temp&0x0f)+0x30;
			   CRC^=SendSbuf[k+1];
			   
			 }
			 
			SendSbuf[10]=CRC;  //jk=9;
			SendSbuf[11]=SendSbuf[15];
			SendSbuf[12]=0;
			//-----
			SendSbuf[0]='T';
			SendSbuf[1]='-';
			
			
	}//end  if(SendSbuf[0]=='S')
	
	
  SEI();
}


/************************************************************
				PTR2000 SET FUNC
*******************************************************
*/
void PTR2K_SEND()
{
    PORTD|=(1<<PD6)|(1<<PD5);
}

void PTR2K_RECEIVE()
{
    PORTD|=(1<<PD6)|(1<<PD5);
	PORTD&=0XBF;
	//CS=0/1 在SET-后就设定好,以后不要动 
}

/********************************
								 I2C 模拟

*************************************************************/
//--i2c \

//#define Start()    	  (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
//#define Stop()     	  (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
//#define Wait()	   	  {while(!(TWCR&(1<<TWINT)));}
void sdelay(unsigned char k)
{
     while(k--);
}
void I2C_Reset()
{
 	 CSL();
	 RSTL();
	 SCLL();
	 sdelay(100);
	 RSTH();
	 
	 sdelay(100);
	 SCLH();
	 sdelay(100);
	 SCLL();
	 sdelay(100);
	 RSTL();
}
void I2C_Start() //9
{
 	 DDRC=0Xff;
 	 SDAH();
	//  sdelay(10);
	 SCLH();
	 //---------
	  sdelay(100);
	  SDAL();
	  sdelay(100);
	   //----
	   SCLL();
	   sdelay(10);
	 
}

void I2C_Stop() //8
{
    //DDRC=0Xff;
	SDAL();
	SCLH();
	sdelay(100);
	SDAH();
	sdelay(100);
	SCLL();
	SDAL();
	sdelay(10);
	
}

void I2C_ACK() //7
{
   SDAL();
   SCLH();
   sdelay(100);
   SCLL();
   SDAH();
   sdelay(10);
}

void I2C_NACK() //66
{
   SDAH();
   SCLH();
   sdelay(100);
   SCLL();
   SDAL();
   sdelay(10);

}
void I2C_CACK()   //55
{

   //SDAH();
   SCLH();
     sdelay(10);
  SDAIN();//----
     sdelay(10);
   SCLH();
   sdelay(100);
   SCLL();
     sdelay(10);
	 
   SDAOUT();
     sdelay(10);

}

void I2C_WriteByte(unsigned char WByte)  //44
{
  unsigned char i,j,k;
  DDRC=0XFF;
  for(i=0;i<8;i++)
  {
        
   		if(WByte&0x80) SDAH();
		else SDAL();
		sdelay(10);
		SCLH();
		sdelay(100);
		SCLL();
		sdelay(100);
		WByte<<=1;
  
  }
  

}

unsigned char  I2C_ReadByte() //33
{
   unsigned char i,RDbyte;
   SDAIN();
  DDRC=0XFD;
   RDbyte=0;
  for(i=0;i<8;i++)
  {
   		SCLH();
		sdelay(100);
		//SDA-->PC1
		if(PINC&0X02) //??
		 {   RDbyte<<=1;
		     RDbyte|=0x01;
		 }
		else
		{
		 RDbyte<<=1;
		   RDbyte&=0xfe;
		}
		sdelay(10);
		SCLL();
		
  }
  //SDAOUT();
  DDRC=0XFF;
  return RDbyte;
}

unsigned char  I2C_Read(unsigned char addr)  //22
{
  unsigned char i,k;
  I2C_Start();
  I2C_WriteByte(0xa0);//写 CONTRL
  I2C_CACK();
  sdelay(10);
  
  I2C_WriteByte(addr);
  I2C_CACK();
  sdelay(10);
  
  I2C_Start();
  
  I2C_WriteByte(0xa1);//读控制字符 CONTRL
  I2C_CACK();
  sdelay(10);
  k=I2C_ReadByte();
  I2C_NACK();
  I2C_Stop();
  return k;
}
//---写I2C
void I2C_Write(unsigned char addr,unsigned char Wbyte) // 111
{
 unsigned char i,k;
  I2C_Start();
  I2C_WriteByte(0xa0);//写 CONTRL
  I2C_CACK();
  sdelay(10);
  I2C_WriteByte(addr);
  I2C_CACK();
  sdelay(10);
  I2C_WriteByte(Wbyte);
   I2C_CACK();
   sdelay(10);
   I2C_Stop();

}

//----------- IC 卡处理-----------//
void IC_Num_Read()
{
//老板,PD3=0,插卡了 ,卡座常闭合
		unsigned char datax;
		unsigned char  j,i,crc;
		
	if(PIND!=0XA3) ICRead=1;
	
	if((PIND==0XA3)&&(ICRead>0))
	{
		ICRead=0;
	    crc=0;
		T0_Count=0;
		while(T0_Count<5);// 延时等待
		//IC卡:2,3,4,5,  司机号保存处
		//--写SendSbuf[];
		sdelay(200);
		CLI();
		for(j=2;j<6;j++)
		{
		  // datax=I2C_Read(j*2);
		 //  if((datax>47)&&(datax<60)) //是ASCII CODE
		   //   {//写发送
		   		    i=2*(j-1);
			   		datax=I2C_Read(j); //I2C_Write(0,0X33);
					
//写eeprom-------------
//T-32324578
		 sdelay(200);	
		  sdelay(200);	
		   sdelay(200);	
  //EEPROMWriteBytes(8, &SendSbuf[8], 8);
 EEPROMWriteBytes(j+6, &datax, 1);
 sdelay(200);	
  sdelay(200);	
   sdelay(200);	
    sdelay(200);		
 //--------------------				
					SendSbuf[i]=datax>>4;
					SendSbuf[i]+=0x30;
					//--------
					crc^=SendSbuf[i];
					SendSbuf[i+1]=datax&0x0f;
					SendSbuf[i+1]+=0x30;
					//-------
					crc^=SendSbuf[i+1];
					
					sdelay(200);
					
			//}
			//else j=15;
		}
		SendSbuf[10]=crc+30;
		SendSbuf[11]=0;
		SendSbuf[12]=0;
		SendSbuf[0]='T';
		SendSbuf[1]='-';
		
	
	//	   EEPROMWriteBytes(9, &SendSbuf[9], 1);
		   sdelay(200);
	//	   EEPROMWriteBytes(10,&SendSbuf[10],1);
		
		
   //END OF:if((PIND==0XA3)&&(ICRead<3))
		
		
		SEI();
  }

}



⌨️ 快捷键说明

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