📄 main.c.bak
字号:
}
else if((capture_time[j]>MaxCaptureHalfDateRate) &&(capture_time[j]<MaxCaptureDateRate))
{
if((i%2)==0)
{
store_bit(!b_edge);
}
else
{
store_bit(b_edge);
}
captured_bits_count++;
if (captured_bits_count>64) //45位数据结构
break;
}
else
{
check_stat=0xf3;
break;
}
j++;
}
}
for(i=0;i<150;i++) //2006-5-13 14:19
{
capture_time[i]=0xff;
}
//trace(capture_time,120);
//trace(capture_data,32);
}
//写卡程序,Manchester解码
void ManchesterWrite(void)
{
uchar i,j;
ClearCaptureBuffers();
captured_bit_count = 0;
capture_cnt = 0;
captured_byte=0;
capture_check=0;
capture_check_count=0;
buffer_capture_check=0;
compute_capture_check=0;
check_stat=0;
TR2 = 0;
TF2=0; //clear pending interrupts
TL2=(uchar)(~maxCaptureTimeLow); TH2=(uchar)((~maxCaptureTimeLow)>>8) ; //set timer with initial time
currentMaxTimeHi = ~maxCaptureTimeHi;
last_capture=~maxCaptureTimeLow;
capture_read_time_data_ptr=capture_time;
flag_wait=1;ET2=1;
// for(i=0;i<0xf0;i++)
// {
// if(DEMOD_OUT == 0) //等待低电平,超时退出
// break;
// }
// if(i>=0xf0)
// {
// for(i=0;i<120;i++)
// {
// capture_time[i]=0xff;
// }
// return;
// }
//
// for(i=0;i<0xf0;i++)
// {
// if(DEMOD_OUT == 1) //等待高电平,超时退出
// break;
// }
// if(i>=0xf0)
// {
// for(i=0;i<120;i++)
// {
// capture_time[i]=0xff;
// }
// return;
// }
TR2=1;
while ( flag_wait )
{
for(i=0;i<0xf0;i++)
{
if(DEMOD_OUT == 0) //等待低电平,超时退出
break;
}
if(i>=0xf0)
{
for(i=0;i<120;i++)
{
capture_time[i]=0xff;
}
return;
}
capture();
for(i=0;i<0xf0;i++)
{
if(DEMOD_OUT == 1) //等待高电平,超时退出
break;
}
if(i>=0xf0)
{
for(i=0;i<120;i++)
{
capture_time[i]=0xff;
}
return;
}
capture();
}
check_stat=ERR_EM4469_NEITHER_ACK;
for (j=0;j<10;j++)
{
if(((halfDataRate*2+8)<capture_time[j])&&(capture_time[j]<(halfDataRate*3+8))
&&(capture_time[j+1]<MaxCaptureHalfDateRate)&&(capture_time[j+2]>MaxCaptureHalfDateRate)
&&(capture_time[j+2]<(halfDataRate*3+8)))
break;
}
if(j==5)
{
check_stat = 0xf1;
return;
}
check_stat = UART_MESSAGE_OK;
for(i=0;i<120;i++)
{
capture_time[i]=0xff;
}
}
void ClearCaptureBuffers(void)
{
uchar i;
for(i=0; i<CAPTURE_SIZE; i++)
{
capture_data[i] = 0;
}
}
void capture(void)
{
uint capt;
uint icr = count_module();
capt = icr - last_capture;
last_capture = icr;
*capture_read_time_data_ptr++=capt; //保存高低电平的时间(以125K的脉冲个数),ptr++
}
//保存解码数据
void store_bit(bit b)
{
if(b==1)
captured_byte = captured_byte|(0x80>>captured_bit_count);
if (captured_bit_count==7)
{
capture_data[capture_cnt++] = captured_byte;
captured_byte=0;
captured_bit_count = 0;
}
else captured_bit_count++;
}
uint count_module(void)
{
do
{
count_timer2.bytes.high2 = TH2;
count_timer2.bytes.low2 = TL2;
}while(count_timer2.bytes.high2 != TH2);
return count_timer2.word;
}
//读取本DEMO读卡器的软件版本,硬件版本,日期等信息
/*
void ReadStatusToPC(void)
{
tx_buff[0]=0x02;
tx_buff[1]=0x08;
tx_buff[2]=0xfd;
tx_buff[3]=0x00;
tx_buff[4]=READER_RELEASE;
tx_buff[5]=READER_DATE | ((READER_MONTH & 0x07) << 5);
tx_buff[6]=(READER_MONTH >> 3) | (READER_YEAR << 1);
tx_buff[7]=READER_FAMILY;
tx_buff[8]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]);
tx_buff[9]=0x03;
trace(tx_buff,10);
}
*/
//从串口发送数据出去
void trace(uchar *str,uchar len)
{
uint i;
MYTI = 0;
for(i=0;i<len;i++)
{
myputchar(*str);
str++;
}
}
//trace调用
void myputchar(uchar c)
{
//ES = 0;
SBUF = c;
while (MYTI == 0);
MYTI = 0;
//ES = 1;
}
/*
void speak_on(void)
{
uint xdata i;
speak = 0;
for(i = 0;i<0xfff;i++);
speak = 1;
}
// 返回无卡信息
void return_00(void)
{
tx_buff[0]=0x02;
tx_buff[1]=0x0a;
tx_buff[2]=0x86;
tx_buff[3]=0x14; //无卡 或 错误
tx_buff[4]=1;
tx_buff[5]=0;
tx_buff[6]=0;
tx_buff[7]=0;
tx_buff[8]=0;
tx_buff[9]=0;
tx_buff[10]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]^tx_buff[8]^tx_buff[9]);
tx_buff[11]=0x03;
trace(tx_buff,12);
}
*/
void ResetT5557(void)
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(0x00);
SendForward(fwd_bit_count);
}
void WakeUpT5557(void)
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(0x01);
fwd_bit_count += Prepare_Data(rx_buff);
SendForward(fwd_bit_count);
}
void GeneralRead_T5557()//发送时序 Opcode
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(rx_buff[1]);
SendForward(fwd_bit_count);
maxCaptureTimeLow = maxTRead;
maxCaptureTimeHi = 0;
ManchesterRead();
if (check_stat==UART_MESSAGE_OK)
{
tx_buff[0]=capture_data[0]; //数据
tx_buff[1]=capture_data[1]; //数据
tx_buff[2]=capture_data[2]; //数据
tx_buff[3]=capture_data[3]; //数据
tx_buff[4]=capture_data[4]; //数据
tx_buff[5]=capture_data[5]; //数据
tx_buff[6]=capture_data[6]; //数据
tx_buff[7]=capture_data[7]; //数据
trace(tx_buff,8); //发送到PC 11个字节
}
else
{
tx_buff[0]= check_stat; //数据
tx_buff[1]=0xee; //数据
tx_buff[2]=0xee; //数据
tx_buff[3]=0xee; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
}
void ReadT5557(void)//发送时序 Opcode + Lock + Addr
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(rx_buff[1]);
fwd_bit_count += Prepare_Lock();
fwd_bit_count += Prepare_Addr(rx_buff[2]);
SendForward(fwd_bit_count);
maxCaptureTimeLow = maxTRead;
maxCaptureTimeHi = 0;
ManchesterRead();
if (check_stat==UART_MESSAGE_OK)
{
tx_buff[0]=capture_data[0]; //数据
tx_buff[1]=capture_data[1]; //数据
tx_buff[2]=capture_data[2]; //数据
tx_buff[3]=capture_data[3]; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
else
{
tx_buff[0]= check_stat; //数据
tx_buff[1]=0xee; //数据
tx_buff[2]=0xee; //数据
tx_buff[3]=0xee; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
}
void WriteT5557(void)//发送时序 Opcode + Lock + Data + Addr
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(0x01);
fwd_bit_count += Prepare_Lock();
fwd_bit_count += Prepare_Data(rx_buff);
fwd_bit_count += Prepare_Addr(rx_buff[5]);
SendForward(fwd_bit_count);
maxCaptureTimeLow = maxTWrite;
maxCaptureTimeHi = 0;
ManchesterWrite();
if (check_stat==UART_MESSAGE_OK)
{
tx_buff[0]=0xe0; //数据
tx_buff[1]=0x00; //数据
tx_buff[2]=0x00; //数据
tx_buff[3]=0x00; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
else
{
tx_buff[0]= check_stat; //数据
tx_buff[1]=0xee; //数据
tx_buff[2]=0xee; //数据
tx_buff[3]=0xee; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
}
void ReadT5557_PWD(void) //发送时序 Opcode + PassWord + Lock + Addr
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(rx_buff[1]);
fwd_bit_count += Prepare_Data(rx_buff);
fwd_bit_count += Prepare_Lock();
fwd_bit_count += Prepare_Addr(rx_buff[5]);
SendForward(fwd_bit_count);
maxCaptureTimeLow = maxTRead;
maxCaptureTimeHi = 0;
ManchesterRead();
if (check_stat==UART_MESSAGE_OK)
{
tx_buff[0]=capture_data[0]; //数据
tx_buff[1]=capture_data[1]; //数据
tx_buff[2]=capture_data[2]; //数据
tx_buff[3]=capture_data[3]; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
else
{
tx_buff[0]= check_stat; //数据
tx_buff[1]=0xee; //数据
tx_buff[2]=0xee; //数据
tx_buff[3]=0xee; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
}
void WriteT5557_PWD(void) //发送时序 Opcode + PassWord + Lock + Data + Addr
{
uchar fwd_bit_count;
fwd_bit_count = Prepare_Cmd(0x01);
fwd_bit_count += Prepare_Data(rx_buff);
fwd_bit_count += Prepare_Lock();
fwd_bit_count += Prepare_Data(rx_buff+4);
fwd_bit_count += Prepare_Addr(rx_buff[9]);
SendForward(fwd_bit_count);
maxCaptureTimeLow = maxTWrite;
maxCaptureTimeHi = 0;
ManchesterWrite();
if (check_stat==UART_MESSAGE_OK)
{
tx_buff[0]=0xe0; //数据
tx_buff[1]=0x00; //数据
tx_buff[2]=0x00; //数据
tx_buff[3]=0x00; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
else
{
tx_buff[0]= check_stat; //数据
tx_buff[1]=0xee; //数据
tx_buff[2]=0xee; //数据
tx_buff[3]=0xee; //数据
trace(tx_buff,4); //发送到PC 11个字节
}
}
/*
uchar PulseWide()
{
uint wide = 0;
uint icr;
read_pulse_front = 2;
capture_cnt = 0;
last_capture = 0;
flag_wait = 1;
read_header = 1;
is_1p = 0;
read_ok = 0;
TH2 = 0;
TL2 = 0;
edge = 0; //save prior Vol state
TR2 = 1;
ET2 = 1;
while(flag_wait)
{
while(read_header)
{
if((edge ^ DEMOD_OUT))// && (DEMOD_OUT==1))
{
edge = DEMOD_OUT;
icr = count_module();
wide = icr - last_captrue;
last_capture = icr;
if(wide>0x28 && wide<0x38)//1.5P
{
read_ok = 1;
}
if(read_ok && (wide>0x08 && wide<0x18))//0.5P
{
read_header = 0;
read_ok = 0;
}
}
}
while(!read_ok)//manchester decode
{
if(edge ^ DEMOD_OUT)
{
edge = DEMOD_OUT;
icr = count_module();
wide = icr - last_captrue;
last_capture = icr;
if(wide>0x38 && wide<0x08)//>1.5P
{
check_stat = ERR_T5557_READ_ERR;
flag_wait = 0;
break;
}
if(wide>0x28 && wide<0x38)//1.5P
{
if(capture_cnt != 0)//只在起始才有可能检测到
{
flag_wait = 0;
break;
}
read_pulse_front = 1;//first bit
continue;
}
if(wide>0x18 && wide<0x28)//1P
{
if(capture_cnt == 32)
{
flag_wait = 0;
break;
}
if(read_pulse_front == 2)
{
read_pulse_front = 0;//first bit
continue;
}
else if(read_pulse_front == 1)//;'0'
{
if(is_1p==0)
{
code = code<<1;
read_pulse_front = 0;
continue;
}
}
else //read_pulse_front =0
{
}
}
if(wide>0x08 && wide<0x18)//0.5P
{
}
}// edge^DEMOD_OUT
}// !read_ok
}// flag_wait
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -