📄 test2.c
字号:
{
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 + -