📄 zlg500b.lst
字号:
161 #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
179
C51 COMPILER V7.20 ZLG500B 05/28/2007 14:55:19 PAGE 4
180 #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
199
200 #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
218
219 #if mifs_authentication_en
220 uchar mifs_authentication(uchar _Mode,uchar _SecNr) //开始进行验证操作
221 {
222 1 ser_buffer[SEQNR]=0;
223 1 ser_buffer[COMMAND]=0x44;
224 1 ser_buffer[LENGTH]=0x02;
225 1 ser_buffer[DATA]=_Mode;
226 1 ser_buffer[DATA+1]=_SecNr; //所访问卡的扇区号 必须小于16
227 1
228 1 if(ser_comm()!=COMM_OK)
229 1 return COMM_ERR;
230 1
231 1 return ser_buffer[STATUS];
232 1 }
233 #endif
234
235 #if mifs_authentication2_en
236 uchar mifs_authentication2(uchar _Mode,uchar _SecNr,uchar _KeyNr) //可选择密匙区验证
237 { //_KeyNr 用于证实的密钥区号
238 1 ser_buffer[SEQNR]=0;
239 1 ser_buffer[COMMAND]=0x72;
240 1 ser_buffer[LENGTH]=0x03;
241 1 ser_buffer[DATA]=_Mode;
C51 COMPILER V7.20 ZLG500B 05/28/2007 14:55:19 PAGE 5
242 1 if(_SecNr<=32)
243 1 ser_buffer[DATA+1]=_SecNr;
244 1 else
245 1 ser_buffer[DATA+1]=32+((_SecNr-32)<<2); //为了支持S70卡
246 1 ser_buffer[DATA+2]=_KeyNr;
247 1
248 1 if(ser_comm()!=COMM_OK)
249 1 return COMM_ERR;
250 1
251 1 return ser_buffer[STATUS];
252 1 }
253 #endif
254
255 #if mifs_authKey_en //ISO 9798-2在RWM和RFID之间使用3轮确认
256 uchar mifs_authKey(uchar _Mode,uchar _SecNr,uchar *_Key) //直接密码验证
257 { //_Key用于证实的密码首址
258 1 ser_buffer[SEQNR]=0;
259 1 ser_buffer[COMMAND]=0x73;
260 1 ser_buffer[LENGTH]=0x08;
261 1 ser_buffer[DATA]=_Mode;
262 1 if(_SecNr<=32)
263 1 ser_buffer[DATA+1]=_SecNr;
264 1 else
265 1 ser_buffer[DATA+1]=32+((_SecNr-32)<<2); //为了支持S70卡
266 1 memcpy(&ser_buffer[DATA+2],_Key,6); //将密码向500B上面发
267 1
268 1
269 1 if(ser_comm()!=COMM_OK)
270 1 return COMM_ERR;
271 1
272 1 return ser_buffer[STATUS];
273 1 }
274 #endif
275
276 #if mifs_halt_en
277 uchar mifs_halt(void) //将卡置于挂起状态
278 {
279 1 ser_buffer[SEQNR]=0;
280 1 ser_buffer[COMMAND]=0x45;
281 1 ser_buffer[LENGTH]=0x00;
282 1
283 1 if(ser_comm()!=COMM_OK)
284 1 return COMM_ERR;
285 1
286 1 return ser_buffer[STATUS];
287 1 }
288 #endif
289
290 #if mifs_read_en
291 uchar mifs_read(uchar _Adr,uchar idata *_Data) //从卡中相应地址中读出一个16字节的数据块
292 {
293 1 ser_buffer[SEQNR]=0;
294 1 ser_buffer[COMMAND]=0x46;
295 1 ser_buffer[LENGTH]=0x01;
296 1 ser_buffer[DATA]=_Adr;
297 1
298 1 if(ser_comm()!=COMM_OK)
299 1 return COMM_ERR;
300 1
301 1 if(ser_buffer[STATUS]==MI_OK) //如果读成功
302 1 {
303 2 memcpy(_Data,&ser_buffer[DATA],16); //将数据复制出来
C51 COMPILER V7.20 ZLG500B 05/28/2007 14:55:19 PAGE 6
304 2 }
305 1 return ser_buffer[STATUS];
306 1 }
307 #endif
308
309 #if mifs_write_en
310 uchar mifs_write(uchar _Adr,uchar idata *_Data) //向指定地址写入16字节的数据
311 {
312 1 ser_buffer[SEQNR]=0;
313 1 ser_buffer[COMMAND]=0x47;
314 1 ser_buffer[LENGTH]=17;
315 1 ser_buffer[DATA]=_Adr;
316 1 memcpy(&ser_buffer[DATA+1],_Data,16); //将要发送的数据复制到数据帧中
317 1
318 1 if(ser_comm()!=COMM_OK)
319 1 return COMM_ERR;
320 1
321 1 return ser_buffer[STATUS];
322 1 }
323 #endif
324
325 #if mifs_increment_en
uchar mifs_increment(uchar _Adr,long idata *_Value) //增加访问单元块的字节中的数值,并将结果保存在卡的内
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -