📄 rc500.lst
字号:
208 4 if(RECEIVEBUFFER[5]==0x0A)
209 4 selec_abkey=PICC_AUTHENT1A;
210 4 if(RECEIVEBUFFER[5]==0x0B)
211 4 selec_abkey=PICC_AUTHENT1B;
212 4
213 4 e2key_secotor=RECEIVEBUFFER[6];
214 4
215 4 keybuf[0]=RECEIVEBUFFER[7];
216 4 keybuf[1]=RECEIVEBUFFER[8];
217 4 keybuf[2]=RECEIVEBUFFER[9];
218 4 keybuf[3]=RECEIVEBUFFER[10];
219 4 keybuf[4]=RECEIVEBUFFER[11];
220 4 keybuf[5]=RECEIVEBUFFER[12];
221 4
222 4 status=Mf500PcdLoadKeyE2(selec_abkey,e2key_secotor,keybuf); //first save key
-to e2rom
223 4 if(status==00)
224 4 SendData("Load key e2 ok ");
225 4 else
226 4 SendData("Load key e2 lose ");
227 4 break;
228 4 case 0x55: //rc500 的地址0x30---0x7f存贮测试
229 4 e2key_secotor=RECEIVEBUFFER[5];
230 4 rc500_e2addr = 0x30 + e2key_secotor * 0x18;
231 4 keybuf[0]=RECEIVEBUFFER[6];
232 4 keybuf[1]=RECEIVEBUFFER[7];
233 4 keybuf[2]=RECEIVEBUFFER[8];
C51 COMPILER V6.00i RC500 01/15/2004 10:42:47 PAGE 5
234 4 keybuf[3]=RECEIVEBUFFER[9];
-
235 4 status = PcdWriteE2(rc500_e2addr,4,keybuf);
236 4 if(status==0)
237 4 SendData("Save Info ok ");
238 4 else
239 4 SendData("Save Info lose ");
240 4 break;
241 4 case 0x56: //读出rc500 的地址0x30---0x7f存贮测试
242 4 e2key_secotor=RECEIVEBUFFER[5];
243 4 status= PcdReadE2(e2key_secotor,4,rbuf);
244 4 if(status==0)
245 4 {
246 5 SendData("Read Info ok ");
247 5 for(i=0;i<4;i++)
248 5 {
249 6 SendHex(rbuf[i]); //显示到屏幕
250 6 }
251 5 SendEnter();
252 5 }else
253 4 SendData("Read Info lose");
-
254 4 break;
255 4 case 0x99:
256 4 memset(temp_buf,0,sizeof(temp_buf));
257 4 sector_num=RECEIVEBUFFER[3]*4+3;//算出密钥所在的块
258 4
259 4 temp_buf[0]=RECEIVEBUFFER[5];
260 4 temp_buf[1]=RECEIVEBUFFER[6];
261 4 temp_buf[2]=RECEIVEBUFFER[7];
262 4 temp_buf[3]=RECEIVEBUFFER[8];
263 4 temp_buf[4]=RECEIVEBUFFER[9];
264 4 temp_buf[5]=RECEIVEBUFFER[10];
265 4
266 4 temp_buf[6]=RECEIVEBUFFER[11];
267 4 temp_buf[7]=RECEIVEBUFFER[12];
268 4 temp_buf[8]=RECEIVEBUFFER[13];
269 4 temp_buf[9]=RECEIVEBUFFER[14];
270 4
271 4 temp_buf[10]=RECEIVEBUFFER[15];
272 4 temp_buf[11]=RECEIVEBUFFER[16];
273 4 temp_buf[12]=RECEIVEBUFFER[17];
274 4 temp_buf[13]=RECEIVEBUFFER[18];
275 4 temp_buf[14]=RECEIVEBUFFER[19];
276 4 temp_buf[15]=RECEIVEBUFFER[20];
277 4
278 4 status=Mf500PiccWrite(sector_num,temp_buf);
279 4 if(status==0)
280 4 SendData("Change ok");//显示写成功
281 4 else
282 4 SendData("Change lose");
283 4 break;
284 4
285 4 case 0x30: //read rf card
286 4
287 4 block_num=RECEIVEBUFFER[3]*4+RECEIVEBUFFER[4];
288 4 status=Mf500PiccRead(block_num,rbuf);
289 4 if(status==0)
290 4 {
291 5 SendData("read sector ok ");
292 5 for(i=0;i<16;i++)
293 5 {
C51 COMPILER V6.00i RC500 01/15/2004 10:42:47 PAGE 6
294 6 SendHex(rbuf[i]); //显示到屏幕
295 6 }
296 5 SendEnter();
297 5 }else{
298 5 SendData("Read sector lose");
299 5 }
300 4
301 4 break;
302 4 case 0xA0: //write rf card
303 4
304 4 block_num=RECEIVEBUFFER[3]*4+RECEIVEBUFFER[4];
305 4
306 4 memmove(temp_buf,RECEIVEBUFFER+5,16); //搬移16个16进制数
307 4
308 4 status=Mf500PiccWrite(block_num,temp_buf);
309 4 if(status==0)
310 4 SendData("write ok");//显示写成功
311 4 else
312 4 SendData("write lose");
313 4 break;
314 4 case 0x34: //initval
315 4 block_num=RECEIVEBUFFER[3]*4+RECEIVEBUFFER[4];
316 4
317 4 memmove(temp_buf,RECEIVEBUFFER+5,16); //搬移16个16进制数
318 4
319 4 status=Mf500PiccWrite(block_num,temp_buf);
320 4 if(status==0)
321 4 SendData("value init ok");//显示写成功
322 4 else
323 4 SendData("value write lose");
324 4
325 4 break;
326 4 case 0xC0: //decrement
327 4 block_num=RECEIVEBUFFER[3]*4+RECEIVEBUFFER[4];
328 4 //memmove(temp_buf,RECEIVEBUFFER+5,1); //搬移1个16进制数
329 4 temp_buf[0]=RECEIVEBUFFER[5];
330 4 temp_buf[1]=0;
331 4 temp_buf[2]=0;
332 4 temp_buf[3]=0;
333 4 status=Mf500PiccValue(0xc0,block_num,temp_buf,block_num); //减值
334 4 if(status==0)
335 4 SendData("Dec value ok");
-
336 4 else SendData("Dec value not ok");
337 4 break;
338 4 case 0xC1: //increment
339 4 block_num=RECEIVEBUFFER[3]*4+RECEIVEBUFFER[4];
340 4 // memmove(temp_buf,RECEIVEBUFFER+5,1); //搬移1个16进制数
341 4 temp_buf[0]=RECEIVEBUFFER[5];
342 4 temp_buf[1]=0;
343 4 temp_buf[2]=0;
344 4 temp_buf[3]=0;
345 4 status=Mf500PiccValue(0xc1,block_num,temp_buf,block_num); //增值操作
-
346 4 if(status==0)
347 4 SendData("Inc value ok");
-
348 4 else
349 4 SendData("Inc value not ok");
350 4 break;
351 4 case 0x44: //idle
352 4 status=Mf500PiccHalt();
C51 COMPILER V6.00i RC500 01/15/2004 10:42:47 PAGE 7
353 4 if(status==0)
354 4 SendData("Close ok");
-
355 4 else
356 4 SendData("Close lose");
357 4 break;
358 4 default:
359 4 SendData("erro command");
360 4 break;
361 4
362 4 }//run command
363 3 }////接收成功
364 2 }//while(1)
365 1 }//end main()
366 /****************************************************************************
367 * *
368 * Function: Mf500PcdConfig *
369 * *
370 * Input: *
371 * Output: STATE *
372 * *
373 ****************************************************************************/
374 char Mf500PcdConfig(void)
375 {
376 1 char idata status = MI_RESETERR;
377 1 unsigned int idata RstLoopCnt = 0;
378 1 unsigned int idata CmdWaitCnt = 0;
379 1
380 1 // wait until reset command recognized
381 1 do
382 1 {
383 2 Delay(100); // wait
384 2 PReset=1; // reset RC500
385 2 Delay(300); // wait
386 2 PReset=0; // clear reset pin
387 2 Delay(300); // wait
388 2 }
389 1 while (ReadRC(RegPage) != 0x80);
390 1 do
391 1 {
392 2 WriteRC(RegPage,0x0); // Dummy access in order to determine the bus
393 2 }while(ReadRC(RegCommand) != 0x00); // configuration
394 1 // necessary read access
395 1 // after first write access, the returned value
396 1 // should be zero ==> interface recognized
397 1 if (ReadRC(RegCommand) != 0x00)
398 1 {
399 2 status = MI_INTERFACEERR;
400 2 }
401 1 else
402 1 {
403 2 status = 0;
404 2 }
405 1
406 1 if(status==0)
407 1 {
408 2 // loade2();
409 2
410 2 XBYTE[RegClockQControl]=0x0;
411 2 XBYTE[RegClockQControl]=0x40;
412 2
413 2 Delay(24);// wait approximately 100 us - calibration in progress
C51 COMPILER V6.00i RC500 01/15/2004 10:42:47 PAGE 8
414 2 ClearBitMask(RegClockQControl,0x40); // clear bit ClkQCalib for
415 2
416 2 XBYTE[RegBitPhase]=0xAd;
417 2 XBYTE[RegRxThreshold]=0xFF;
418 2 XBYTE[RegRxControl2]=01;
419 2 XBYTE[RegFIFOLevel]=0x1A; // initialize to 26d
420 2 XBYTE[RegTimerControl]=0x02; // TStopRxEnd=0,TStopRxBeg=0,当数据发送结束时定时器自动启动
421 2 XBYTE[RegIRqPinConfig]=0x3; // interrupt active low enable管脚irq上的信号与位irq状态相反,标准cmos输
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -