📄 typeb.lst
字号:
232 5 {
233 6 pi->MfLength = (n-1)*8 + lastBits;
234 6 }
235 5 else
236 5 {
237 6 pi->MfLength = n*8;
238 6 }
239 5 if (n == 0)
240 5 {
241 6 n = 1;
C51 COMPILER V7.50 TYPEB 07/17/2008 22:58:13 PAGE 5
242 6 }
243 5 for (i=0; i<n; i++)
244 5 {
245 6 pi->MfData[i] = ReadIO(RegFIFOData);
246 6 }
247 5 }
248 4 }
249 3 else if (ReadIO(RegErrorFlag)&0x01)
250 3 {
251 4 status = MI_COLLERR;
252 4 if (recebyte)
253 4 {
254 5 n = ReadIO(RegFIFOLength);
255 5 lastBits = ReadIO(RegSecondaryStatus) & 0x07;
256 5 if (lastBits)
257 5 {
258 6 pi->MfLength = (n-1)*8 + lastBits;
259 6 }
260 5 else
261 5 {
262 6 pi->MfLength = n*8;
263 6 }
264 5 if (n == 0)
265 5 {
266 6 n = 1;
267 6 }
268 5 for (i=0; i<n; i++)
269 5 {
270 6 pi->MfData[i+1] = ReadIO(RegFIFOData);
271 6 }
272 5 }
273 4 pi->MfData[0]=ReadIO(0x0B);
274 4 }
275 3
276 3 }
277 2 else if (n & irqEn & 0x20)
278 2 { status = MI_NOTAGERR; }
279 2 else if (!(ReadIO(RegErrorFlag)&0x17))
280 2 { status = MI_ACCESSTIMEOUT; }
281 2 else
282 2 { status = MI_COM_ERR; }
283 2
284 2 WriteIO(RegInterruptEn,0x7F);
285 2 WriteIO(RegInterruptRq,0x7F);
286 2 SetBitMask(RegControl,0x04); // stop timer now
287 2 WriteIO(RegCommand,PCD_IDLE);
288 2 }
289 1 return status;
290 1 }
291
292 //////////////////////////////////////////////////////////////////////
293 //ATTRIB
294 //////////////////////////////////////////////////////////////////////
295 unsigned char PcdAnticoll(unsigned char *snr) //读取卡片序列号函数
296 {
297 1 unsigned char i;
298 1 unsigned char snr_check=0;
299 1 char status=MI_OK;
300 1
301 1 struct TranSciveBuffer *pi;
302 1
303 1 PcdSetTmo(14);
C51 COMPILER V7.50 TYPEB 07/17/2008 22:58:13 PAGE 6
304 1 WriteIO(RegDecoderControl,0x28);
305 1 ClearBitMask(RegControl,0x08);
306 1 WriteIO(RegChannelRedundancy,0x03);
307 1
308 1 pi->MfCommand=PCD_TRANSCEIVE;
309 1 pi->MfLength=2;
310 1 pi->MfData[0]=PICC_ANTICOLL1;
311 1 pi->MfData[1]=0x20;
312 1 status=PcdComTransceive(pi);
313 1 // ser_send(&status,1);
314 1 if(!status)
315 1 {
316 2 for(i=0;i<4;i++)
317 2 {
318 3 snr_check^=pi->MfData[i];
319 3 }
320 2 if(snr_check!=pi->MfData[i])
321 2 {
322 3 status=MI_SERNRERR;
323 3 }
324 2 else
325 2 {
326 3 for(i=0;i<4;i++)
327 3 {
328 4 *(snr+i)=pi->MfData[i];
329 4 }
330 3 }
331 2
332 2 }
333 1 ClearBitMask(RegDecoderControl,0x20);
334 1 return status;
335 1 }
336
337 ///////////////////////////////////////////////////////////////////////
338 // C O N F I G I S O 1 4 4 4 3 T Y P E
339 ///////////////////////////////////////////////////////////////////////
340 unsigned char M500PcdConfigISOType(unsigned char type)
341 {
342 1 if(type==TYPEA)
343 1 {
344 2 WriteIO(RegTxControl,0x5b); // Force100ASK, TX1 & TX2 enable 0x11内部编码器 b的设置位不懂??
345 2 WriteIO(RegCoderControl,0x19); // Miller coding, 106kbps iso14443-A 0x14地址
346 2 WriteIO(RegRxControl1,0x73); //8puls iso14443A&B 42dB 0x19
347 2 WriteIO(RegDecoderControl,0x08); // Manchester Coding iso14443A 0x1a
348 2 WriteIO(RegCRCPresetLSB,0x63); // set CRC preset to 0x6363 0x23 复位值为0x63
349 2 WriteIO(RegCRCPresetMSB,0x63); //0x23 复位值为0x63
350 2 WriteIO(RegRxThreshold,0xff); // set max MinLevel & ColLevel. //0x1c复位值为0xff
351 2 TYPE = TYPEA;
352 2 }
353 1 else
354 1 {
355 2 WriteIO(RegTxControl,0x4b); // disable Force100ASk ok
356 2 WriteIO(RegCoderControl,0x20); // NRZ-L, TypeB baud 106kbps ok
357 2
358 2 WriteIO(RegRxControl1,0x73); // ok
359 2 WriteIO(RegDecoderControl,0x19); // BPSK coding ok
360 2
361 2 WriteIO(RegCRCPresetLSB,0xff); // set CRC preset to 0xffff ok
362 2 WriteIO(RegCRCPresetMSB,0xff); // ok
363 2
364 2 WriteIO(RegTypeBFraming,0x23); // EGT=0 0x17 定义了mode的宽度 ok
365 2 WriteIO(RegBitFraming,0x07); // ok
C51 COMPILER V7.50 TYPEB 07/17/2008 22:58:13 PAGE 7
366 2
367 2 WriteIO(RegBPSKDemControl,0x3e); // ASK=0xfe,ignore EOF and SOF 0x1d地址看datasheet
368 2 WriteIO(RegModConductance,0x06); // set modulation index at 12% 0x13地址看datasheet
369 2 // WriteIO(RegChannelRedundancy, 0x2c);//RegChannelRedundancy
370 2 WriteIO(RegRxThreshold,0x44); // Reduce MinLevel & ColLevel. 0x1c地址
371 2 // WriteIO(RegRxThreshold,0x68);
372 2 // WriteIO(RegRxWait,0x09);
373 2 TYPE = TYPEB;
374 2 }
375 1
376 1 return MI_OK;
377 1 }
378 /*************************************
379 *MFRC632初始化
380 *************************************/
381 void M500PcdConfig(void)
382 {
383 1 ClearBitMask(RegControl,0x08); //清除RegControl标志位
384 1
385 1 WriteIO(RegClockQControl,0x0); //设置Q时钟值
386 1 WriteIO(RegClockQControl,0x40); //设置Q时钟值
387 1 Delay(20); //延时
388 1 ClearBitMask(RegClockQControl,0x40);//清除Q时钟标志位
389 1
390 1 WriteIO(RegTxControl,0x4b); //设置发送控制
391 1 WriteIO(RegCwConductance,0x17); //设置CwConductance宽度
392 1 WriteIO(RegModConductance,0x06); //设置ModConductance数值
393 1 WriteIO(RegCoderControl,0x20); //设置CoderControl代码控制寄存器
394 1 WriteIO(RegModWidth,0x13); //设置ModWidth发射波长
395 1 WriteIO(RegModWidthSOF,0x3F); //设置ModWidthSOF长度
396 1 WriteIO(RegTypeBFraming,0x3B); //设置TypeB帧
397 1
398 1 WriteIO(RegRxControl1,0x73); //设置RxControl1接受寄存器
399 1 WriteIO(RegDecoderControl,0x19); //设置DecoderControl解码控制寄存器
400 1 WriteIO(RegBitPhase,0xAD); //设置位标置控制寄存器BitPhase
401 1 WriteIO(RegRxThreshold,0x88); //设置RxThreshold接受标志位寄存器
402 1 WriteIO(RegBPSKDemControl,0x7E); //设置BPSKDemControl寄存器BPSK发射波长
403 1 WriteIO(RegRxControl2,0x01); //设置RxControl2接受寄存器的数值
404 1
405 1 WriteIO(RegRxWait,0x06); //设置RegRxWait若罔闻寄存器等待时间
406 1 WriteIO(RegChannelRedundancy,0x2C); //设置ChannelRedundancy等待时间
407 1 WriteIO(RegCRCPresetLSB,0xFF); //设置CRCPresetLSB寄存器低位
408 1 WriteIO(RegCRCPresetMSB,0xFF); //设置CRCPresetMSB寄存器高位
409 1 WriteIO(RegTimeSlotPeriod,0x00); //设置TimeSlotPeriod寄存器
410 1 WriteIO(RegMfOutSelect,0x00); //禁止MfOutSelect输出
411 1 WriteIO(RFU27,0x00); //设置RFU27寄存器输出0
412 1
413 1 WriteIO(RegFIFOLevel,0x3F); //设置RegFIFOLevel--FIFOLevel溢出值
414 1 WriteIO(RegTimerClock,0x07); //设置TimerClock时钟值
415 1 WriteIO(RegTimerReload,0x0A); //设置RegTimerReload时钟装入值
416 1 WriteIO(RegTimerControl,0x06); //设置RegTimerControl--定时器控制
417 1 WriteIO(RegIRqPinConfig,0x02); //设置RegIRqPinConfig--中断请求配置
418 1 WriteIO(RFU2E,0x00); //设置RFU2E--寄存器位应保持0x00
419 1 WriteIO(RFU2F,0x00); //设置RFU2F--寄存器位应保持0x00
420 1 PcdSetTmo(106); //设置发送控制时间
421 1 Delay(10); //延时二十毫秒
422 1 PcdAntennaOn();
423 1 }
424
425 /*******************************************************************************************************
426 ** 函数名称:PcdAntennaOn()
427 ** 函数功能:开启天线
C51 COMPILER V7.50 TYPEB 07/17/2008 22:58:13 PAGE 8
428 ** 函数说明:每次开启或关闭天线发射之间至少有1ms的间隔
429 ** 返 回 值:无
430 *******************************************************************************************************/
431 unsigned char PcdAntennaOn(void)
432 {
433 1 unsigned char i;
434 1 i = ReadIO(RegTxControl);
435 1 if (!(i & 0x03))
436 1 {
437 2 SetBitMask(RegTxControl,0x03);
438 2 }
439 1 return 0;
440 1 }
441
442 /*******************************************************************************************************
443 ** 函数名称:PcdAntennaOff()
444 ** 函数功能:关闭天线
445 ** 函数说明:每次开启或关闭天线发射之间至少有1ms的间隔
446 ** 返 回 值:无
447 *******************************************************************************************************/
448 void PcdAntennaOff(void)
449 {
450 1 ClearBitMask(RegTxControl,0x03);
451 1 }
452
453
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1629 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 101
IDATA SIZE = 2 ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -