📄 kbv10work.c
字号:
TR2=1;
return(1);
}
JP_DATA=tmpBit;
Delay_10us();
Delay_10us();
JP_CLK=0;
tmpChar=tmpChar>>1;
Delay_40us();
JP_CLK=1;
}
Delay_10us();
Delay_10us();
if(!JP_CLK)
{
Timer2_Flag=1;
ET2=1;
TR2=1;
return(1);
}
JP_DATA=Parity_make;
Delay_10us();
Delay_10us();
JP_CLK=0;
Delay_40us();
JP_CLK=1;
Delay_40us();
if(!JP_CLK)
{
Timer2_Flag=1;
ET2=1;
TR2=1;
return(1);
}
JP_DATA=1 ; //stop bit
Delay_10us();
Delay_10us();
JP_CLK=0;
Delay_40us();
JP_CLK=1;
//Delay_10us();
JP_DATA=1;
ET2=1;
TR2=1;
while(!JP_CLK);
if(!JP_DATA)
{
Timer2_Flag=1;
ET2=1;
TR2=1;
return (0);
}
while(!JP_CLK);
if(!JP_DATA)
{
Timer2_Flag=1;
ET2=1;
TR2=1;
return (0);
}
ET2=1;
TR2=1;
return (0);
}
/*--------------------------------------------------*/
/* SendMakeToHostCount */
/*--------------------------------------------------*/
void SendMakeToHostCount(uchar iSendChar)
{
uint iSendCount=0;
while ( SendMakeToHost(iSendChar)==1)
{
iSendCount++;
GetByteFromHost();
if(ReadHost_Flag)
{
rece_host_byte=0;
ReadHost_Flag=0;
}
if(iSendCount==SENDCHARMAX)
{
iSendCount=0;
break ;
}
}
}
/*--------------------------------------------------*/
/* Servive_Timer1() */
/* read the data sending by expanded ps/2
/*--------------------------------------------------*/
void Service_Timer1(void) interrupt 3 using 1
{
uchar i,j;
uchar rece_ps2_data[11];
bit flag_check=1;
ET1=0;
TR1=0;
TF1=0X00;
TMOD=0X60;
TL1=0XFF;
TH1=0XFF;
j=0;
while(BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
rece_ps2_data[0]=BJP_DATA;
j=0;
while(!BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
for( i=1;i<9;i++)
{
j=0;
while(BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
rece_ps2_data[i]=BJP_DATA;
j=0;
while(!BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
}
j=0;
while(BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
rece_ps2_data[9]=BJP_DATA; //receive parity
j=0;
while(!BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
j=0;
while(BJP_CLK)
{
j++;
if(j==WAITPS2CLK)
{
ET1=1;
TR1=1;
BJP_CLK=1;
BJP_DATA=1;
return ;
}
}
rece_ps2_data[10]=BJP_DATA; //receive stop
BJP_CLK=0;
if(rece_ps2_data[0]==0)
{
for(i=1;i<9;i++)
{
if(rece_ps2_data[i]==1)
{
flag_check=!flag_check;
}
}
}
if(flag_check==rece_ps2_data[9])
{
rece_ps2_byte=rece_ps2_data[1];
for(i=2;i<9;i++)
{
rece_ps2_byte=rece_ps2_byte+(rece_ps2_data[i]<<(i-1));
}
if(rece_ps2_byte==0xfa)
{
}
else
{
AddDataToBuffer(rece_ps2_byte);
}
}
if(!JP_CLK)
{
if(!JP_DATA)
Timer2_Flag=1;
}
TF1=0X00;
TMOD=0X60;
TL1=0XFF;
TH1=0XFF;
TR1=1;
ET1=1;
BJP_CLK=1;
BJP_DATA=1;
}
/*--------------------------------------------------*/
/* service_timer2() */
/* read one Byte_Data sending by the Host */
/*--------------------------------------------------*/
void Service_Timer2(void) interrupt 5 using 2
{
EA=0;
Timer2_Flag=1;
TF2=0X00;
T2CON=0X02; //Counter2,the falling of T2-pin cause the interrupt
// 16-bit auto reload mode
RCAP2H=0XFF;
RCAP2L=0XFF;
TH2=0XFF;
TL2=0XFF;
ET2=1;
TR2=1;
EA=1;
}
/*--------------------------------------------------*/
/* read the data from card and send to the host INT0() */
/*--------------------------------------------------*/
void Service_Int0(void) interrupt 0 using 0
{
uchar i,j;
uchar temp_trk=0;
uchar trk_bit=0;
uchar trk_xor=0;
uchar ES_num=0;
uint SS_num=0;
uchar xdata mag_trk3[108];
uchar xdata mag_trk2[40];
uchar xdata mag_trk1[79];
uint xdata ddd=0;
bit trk1_send=0,trk2_send=0,trk3_send=0,error=0;
bit Dir_trk1=0,Dir_trk2=0,Dir_trk3=0;
uchar SendTrkFlag=0;
uchar ii=0;
IE0=0X00; //
IT0=0; //1->0 Cause of the int0
EX0=0;
WDTC=0X00; //CLOSE THE WDT
trk_xor=Lock_Scan();
if(!trk_xor)
{
if(!CheckCard_Flag)
{
IE0=0X00;
IT0=1; //1->0 Cause of the int0
EX0=1;
EA=1;
BJP_CLK=1;
return ;
}
}
for(i=0;i<79;i++)
{
mag_trk1[i]=0; ///ini mag_trk[]
}
for(i=0;i<40;i++)
{
mag_trk2[i]=0;
}
for(i=0;i<107;i++)
{
mag_trk3[i]=0;
}
ddd=0;
while(READER_DATA)
{
ddd++;
if(ddd==600)
{
EX0=1;
IT0=1;
BJP_CLK=1;
return ;
}
}
READER_CLK=0; //clr flag bit 4-5us (>500ns)
Delay_5us();
while(!READER_DATA);
READER_CLK=1;
Delay_5us();
READER_CLK=0; //stop bit 15us(>=12.4us)
Delay_10us();
for(i=0;i<16;i++) //8.6us
{
READER_CLK=1; //1.2us 16bit asic version
Delay_10us();
READER_CLK=0;
}
/////////////begin the trk1, decide the direction of trk1////////////
for(j=0;j<2;j++)
{
for(i=0;i<7;i++)
{
READER_CLK=1;
Delay_25us();
READER_CLK=0;
temp_trk=~READER_DATA;
mag_trk1[j]+=temp_trk<<(6-i); //b0--->b6
}
}
READER_CLK=1;
if(!mag_trk1[0]) //trk1 is blank
{
for(ddd=0;ddd<594;ddd++)
{
READER_CLK=1;
READER_CLK=0;
trk1_send=0;
}
READER_CLK=1;
}
else
{
trk1_send=1;
if(mag_trk1[0]!=0x51) // 0x51==101,0001b must be fanxiang
{
Dir_trk1=0;
for(ddd=0;ddd<594;ddd++)
{
READER_CLK=1;
READER_CLK=0;
}
READER_CLK=1;
}
else
{
if(mag_trk1[1]!=0x1f) // 0x1f==001,1111b must be zhengxiang
{
Dir_trk1=1;
for(ddd=0;ddd<594;ddd++)
{
READER_CLK=1;
READER_CLK=0;
}
READER_CLK=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -