?? zlg500b.c
字號:
#include "main.h"
#define __SRC
#include "zlg500B.h"
#undef __SRC
void Serial_int(void) interrupt 4 using 1
{
uchar stx,index,BCC_sum=0,rcv_len=5;
ES=0;
RI=0;
stx=SBUF;
delay_50us(1);
CON_485=1;
REN=0;
SBUF=ACK;
while(TI==0);
TI=0;
CON_485=0;
REN=1;
for(index=0;index<rcv_len;index++)
{
START_T2(RCAP2_10ms);
while(RI==0&&TF2==0);
if(RI==1)
{ RI=0;
ser_buffer[index]=SBUF;
if(index==LENGTH) rcv_len+=ser_buffer[index];
if(index<rcv_len-2) BCC_sum^=ser_buffer[index];
}
else break;
}
STOP_T2();
ES=1;
if(stx!=STX) return;
if(index==rcv_len)
{
if(BCC_sum!=~ser_buffer[rcv_len-2]) return;
if(ser_buffer[rcv_len-1]!=ETX) return;
}
else return;
newdata=1;
}
uchar senddata()
{
uchar send_cnt=3;
uchar send_len;
uchar temp;
ES=0;
do
{ CON_485=1;
REN=0;
SBUF=STX;
while(TI==0);
TI=0;
CON_485=0;
REN=1;
START_T2(RCAP2_10ms);
while(RI==0&&TF2==0);
STOP_T2();
if(RI==1)
{ RI=0;
temp=SBUF;
delay_50us(1);
if(temp==ACK) break;
}
}while(--send_cnt);
if(send_cnt==0) return COMM_ERR;
send_len=ser_buffer[LENGTH]+5;
ser_buffer[send_len-2]=0;
ser_buffer[send_len-1]=ETX;
REN=0;
CON_485=1;
for(send_cnt=0;send_cnt<send_len;send_cnt++)
{
SBUF=ser_buffer[send_cnt];
if(send_cnt<(send_len-2))
ser_buffer[send_len-2]^=ser_buffer[send_cnt];
if(send_cnt==send_len-3)
ser_buffer[send_len-2]=~ser_buffer[send_len-2];
while(TI==0);
TI=0;
}
CON_485=0;
REN=1;
ES=1;
return COMM_OK;
}
uchar ser_comm(void)
{
uchar ser_wdg=120;
if(senddata()!=COMM_OK) return COMM_ERR;
START_T2(RCAP2_2ms);
while(newdata==0&&ser_wdg!=0)
{
if(TF2)
{
START_T2(RCAP2_2ms);
ser_wdg--;
}
}
if(newdata)
{
newdata=0;
return COMM_OK;
}
else
return COMM_ERR;
}
#if mifs_request_en
uchar mifs_request(uchar _Mode,uchar idata *_TagType)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x41;
ser_buffer[LENGTH]=0x01;
ser_buffer[DATA]=_Mode;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
_TagType[0]=ser_buffer[DATA];
_TagType[1]=ser_buffer[DATA+1];
}
return ser_buffer[STATUS];
}
#endif
#if mifs_anticoll_en
uchar mifs_anticoll(uchar _Bcnt,uchar idata *_SNR)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x42;
ser_buffer[LENGTH]=0x01;
ser_buffer[DATA]=_Bcnt;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_SNR,&ser_buffer[DATA],4);
}
return ser_buffer[STATUS];
}
#endif
#if mifs_anticoll2_en
uchar mifs_anticoll2(uchar _Encoll,uchar _Bcnt,uchar idata *_SNR)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x71;
ser_buffer[LENGTH]=0x02;
ser_buffer[DATA]=_Encoll;
ser_buffer[DATA+1]=_Bcnt;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_SNR,&ser_buffer[DATA],4);
}
return ser_buffer[STATUS];
}
#endif
#if mifs_select_en
uchar mifs_select(uchar idata *_SNR,uchar idata *_Size)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x43;
ser_buffer[LENGTH]=0x04;
memcpy(&ser_buffer[DATA],_SNR,4);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
*_Size=ser_buffer[DATA];
}
return ser_buffer[STATUS];
}
#endif
#if mifs_authentication_en
uchar mifs_authentication(uchar _Mode,uchar _SecNr)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x44;
ser_buffer[LENGTH]=0x02;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_SecNr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_authentication2_en
uchar mifs_authentication2(uchar _Mode,uchar _SecNr,uchar _KeyNr)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x72;
ser_buffer[LENGTH]=0x03;
ser_buffer[DATA]=_Mode;
if(_SecNr<=32)
ser_buffer[DATA+1]=_SecNr;
else
ser_buffer[DATA+1]=32+((_SecNr-32)<<2); //為了支持S70卡
ser_buffer[DATA+2]=_KeyNr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_authKey_en
uchar mifs_authKey(uchar _Mode,uchar _SecNr,uchar *_Key)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x73;
ser_buffer[LENGTH]=0x08;
ser_buffer[DATA]=_Mode;
if(_SecNr<=32)
ser_buffer[DATA+1]=_SecNr;
else
ser_buffer[DATA+1]=32+((_SecNr-32)<<2); //為了支持S70卡
memcpy(&ser_buffer[DATA+2],_Key,6);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_halt_en
uchar mifs_halt(void)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x45;
ser_buffer[LENGTH]=0x00;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_read_en
uchar mifs_read(uchar _Adr,uchar idata *_Data)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x46;
ser_buffer[LENGTH]=0x01;
ser_buffer[DATA]=_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_Data,&ser_buffer[DATA],16);
}
return ser_buffer[STATUS];
}
#endif
#if mifs_write_en
uchar mifs_write(uchar _Adr,uchar idata *_Data)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x47;
ser_buffer[LENGTH]=17;
ser_buffer[DATA]=_Adr;
memcpy(&ser_buffer[DATA+1],_Data,16);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_increment_en
uchar mifs_increment(uchar _Adr,long idata *_Value)
{ uchar *temp=(uchar *)_Value;
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x48;
ser_buffer[LENGTH]=5;
ser_buffer[DATA]=_Adr;
ser_buffer[DATA+1]=*(temp+3);
ser_buffer[DATA+2]=*(temp+2);
ser_buffer[DATA+3]=*(temp+1);
ser_buffer[DATA+4]=*temp;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_decrement_en
uchar mifs_decrement(uchar _Adr,long idata *_Value)
{
uchar *temp=(uchar *)_Value;
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x49;
ser_buffer[LENGTH]=5;
ser_buffer[DATA]=_Adr;
ser_buffer[DATA+1]=*(temp+3);
ser_buffer[DATA+2]=*(temp+2);
ser_buffer[DATA+3]=*(temp+1);
ser_buffer[DATA+4]=*temp;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_restore_en
uchar mifs_restore(uchar _Adr)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4A;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_transfer_en
uchar mifs_transfer(uchar _Adr)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4B;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_load_key_en
uchar mifs_load_key(uchar _Mode,uchar _SecNr,uchar *_Nkey)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4C;
ser_buffer[LENGTH]=0x08;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_SecNr;
memcpy(&ser_buffer[DATA+2],_Nkey,6);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_reset_en
uchar mifs_reset(uchar _Msec)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4E;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Msec;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_get_info_en
uchar mifs_get_info(uchar idata *_Info)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4F;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_Info,&ser_buffer[DATA],ser_buffer[LENGTH]);
}
return ser_buffer[STATUS];
}
#endif
#if mifs_close_en
uchar mifs_close(void)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x3F;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_config_en
uchar mifs_config(void)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x52;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_check_write_en
uchar mifs_check_write(uchar idata *_SNR,uchar _Authmode,uchar _Adr,uchar idata *_Data)
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x53;
ser_buffer[LENGTH]=22;
memcpy(&ser_buffer[DATA],_SNR,4);
ser_buffer[DATA+4]=_Authmode;
ser_buffer[DATA+5]=_Adr;
memcpy(&ser_buffer[DATA+6],_Data,16);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_set_control_bit_en
uchar mifs_set_control_bit()
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x50;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_clr_control_bit_en
uchar mifs_clr_control_bit()
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x51;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_buzzer_en
uchar mifs_buzzer(uchar _Frquence,uchar _Opentm,uchar _Closetm,uchar _Repcnt)
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x60;
ser_buffer[LENGTH]=4;
ser_buffer[DATA]=_Frquence;
ser_buffer[DATA+1]=_Opentm;
ser_buffer[DATA+2]=_Closetm;
ser_buffer[DATA+3]=_Repcnt;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_read_E2_en
uchar mifs_read_E2(uchar _Adr,uchar _Length,uchar idata *_Data)
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x61;
ser_buffer[LENGTH]=2;
ser_buffer[DATA]=_Adr;
ser_buffer[DATA+1]=_Length;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_Data,&ser_buffer[DATA],_Length);
}
return ser_buffer[STATUS];
}
#endif
#if mifs_write_E2_en
uchar mifs_write_E2(uchar _Adr,uchar _Length,uchar idata *_Data)
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x62;
ser_buffer[LENGTH]=_Length+2;
ser_buffer[DATA]=_Adr;
ser_buffer[DATA+1]=_Length;
memcpy(&ser_buffer[DATA+2],_Data,_Length);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_value_en
uchar mifs_value(uchar _Mode,uchar _Adr,long idata *_Value,uchar _Trans_Adr)
{
uchar *temp=(uchar *)_Value;
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x70;
ser_buffer[LENGTH]=7;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_Adr;
ser_buffer[DATA+2]=*(temp+3);
ser_buffer[DATA+3]=*(temp+2);
ser_buffer[DATA+4]=*(temp+1);
ser_buffer[DATA+5]=*temp;
ser_buffer[DATA+6]=_Trans_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_cascanticoll_en
uchar mifs_cascanticoll(uchar _Select_code,uchar _Bcnt,uchar *_SNR)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x74;
ser_buffer[LENGTH]=0x02;
ser_buffer[DATA]=_Select_code;
ser_buffer[DATA+1]=_Bcnt;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_SNR,&ser_buffer[DATA],4);
}
return ser_buffer[STATUS];
}
#endif
#if mifs_cascselect_en
uchar mifs_cascselect(uchar _Select_code,uchar *_SNR,uchar *_Sak)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x75;
ser_buffer[LENGTH]=0x05;
ser_buffer[DATA]=_Select_code;
memcpy(&ser_buffer[DATA+1],_SNR,4);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
*_Sak=ser_buffer[DATA];
}
return ser_buffer[STATUS];
}
#endif
#if mifs_ULwrite_en
uchar mifs_ULwrite(uchar _Adr,uchar *_Data)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x76;
ser_buffer[LENGTH]=0x05;
ser_buffer[DATA]=_Adr;
memcpy(&ser_buffer[DATA+1],_Data,4);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_valuedebit_en
uchar mifs_valuedebit(uchar _Mode,uchar _Adr,long idata *_Value)
{
uchar *temp=(uchar *)_Value;
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x77;
ser_buffer[LENGTH]=6;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_Adr;
ser_buffer[DATA+2]=*(temp+3);
ser_buffer[DATA+3]=*(temp+2);
ser_buffer[DATA+4]=*(temp+1);
ser_buffer[DATA+5]=*temp;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_write_reg_en
uchar mifs_write_reg(uchar _Reg,uchar _Value)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x3d;
ser_buffer[LENGTH]=2;
ser_buffer[DATA]=_Reg;
ser_buffer[DATA+1]=_Value;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_read_reg_en
uchar mifs_read_reg(uchar _Reg,uchar *_Value)
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x3e;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Reg;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
*_Value = ser_buffer[DATA];
return ser_buffer[STATUS];
}
#endif
//end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -