⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 用PICC开发的RC500的完整C源程序。单片机用PIC16f73。
💻 LST
字号:
     1: #define uchar unsigned char

     2: #define uint unsigned int

     3: 

     4: #include "pic.h"

     5: #include "string.h"

     6: #include "inc\define.h"

     7: #include "inc\rc500.h"

     8: interrupt intserv(void);

     9: void delay();

    10: void char_to_hex();

    11: 

    12: void WriteRC(unsigned char Address, unsigned char value);    //通用寄存器写命令,先指定页,再对地址写数据

    13: char ReadRC(unsigned char Address);                            //通用寄存器读命令,先指定页,再对地址读数据

    14: void PutRC500(unsigned char address,unsigned char dat3);     // Write one byte to the reader IC address space

    15: char GetRC500(unsigned char address);

    16: char RC500Config(void);

    17: char RC500OutSelect(unsigned char type);

    18: char Mf500PiccRequest(unsigned char req_code, unsigned char *atq);

    19: char RC500GetSnr(unsigned char* snr);

    20: char Mf500PiccAnticoll (unsigned char bcnt,unsigned char *snr);

    21: char PcdRfReset(unsigned char ms);

    22: // char PcdReset(void);

    23: void PcdSetTmo(unsigned int tmoLength);

    24: char PcdSingleResponseCmd(unsigned char cmd);

    25: 

    26: // char Mf500PcdSetDefaultAttrib(void);

    27: // char Mf500PcdLoadKeyE2(unsigned char key_type,unsigned char sector,unsigned char *uncoded_keys);

    28: 

    29: 

    30: 

    31: 

    32: char Mf500PiccCommonRequest(unsigned char req_code, unsigned char *atq);

    33: 

    34: //

    35: char Mf500PiccCascAnticoll (unsigned char select_code,unsigned char bcnt,unsigned char *snr);

    36: //

    37: char Mf500PiccSelect(unsigned char *snr, unsigned char *sak);

    38: //

    39: char Mf500PiccCascSelect(unsigned char select_code, unsigned char *snr, unsigned char *sak);

    40: // char Mf500PiccAuthKey(unsigned char auth_mode,unsigned char *snr,unsigned char *keys,  unsigned char sector);

    41: //

    42: // char Mf500PiccRead(unsigned char addr,unsigned char *data1);    //从相应卡块读 16 字节

    43: // char Mf500PiccWrite(unsigned char addr,unsigned char *data1);   //向相应卡块写 16 字节

    44: // char Mf500PiccHalt(void);

    45: //

    46: // char Mf500PiccAuthState(unsigned char auth_mode,unsigned char *snr,unsigned char sector);

    47: //

    48: // char Mf500PiccAuth(unsigned char key_type,unsigned char key_addr,unsigned char block);

    49: // ;

    50: // char Mf500PiccAuthE2(unsigned char auth_mode,unsigned char *snr,unsigned char key_sector,unsigned char block);

    51: //

    52: // char M500PiccValue(unsigned char dd_mode,unsigned char addr,unsigned long value);

    53: //

    54: // char M500PiccRestore(unsigned char addr);

    55: //

    56: // char M500PiccTransfer(unsigned char trans_addr);

    57: //

    58: // char Mf500HostCodeKey(unsigned char *uncoded, unsigned char *coded);

    59: //

    60: // void Mf500E2LoadKey(unsigned char *key,unsigned char addr);

    61: // void Mf500E2ReloadKey(unsigned char addr);

    62: char PcdReadE2(unsigned short startaddr,unsigned char length,unsigned char* data);

    63: char PcdWriteE2(unsigned short startaddr,unsigned char length,unsigned char* data);

    64: //

    65: void SetBitMask(unsigned char reg,unsigned char mask);

    66: void ClearBitMask(unsigned char reg,unsigned char mask);

    67: void FlushFIFO(void);

    68: // char ExchangeByteStream(unsigned char Cmd,unsigned char *send_data,unsigned char send_bytelen,unsigned char *rec_data,  unsigned char *rec_bytelen);

    69: //

    70: // void start_timeout(unsigned int _50us);

    71: // void stop_timeout(void);

    72: void CommRx(void);

    73: void BeepBeep(unsigned char cunt,unsigned char Hold);

    74: void BeepControl(void);

    75: void Copy(unsigned char *ptr1,unsigned char *ptr2,unsigned char Numb);

    76: void LED_R_Flash(unsigned char cunt,unsigned char timer);

    77: void LEDControl(void);

    78: void SysIni(void);

    79: // void eStart(void);

    80: // void eStop(void);

    81: // void eSend(unsigned char ebyte);

    82: // void WaitAck(void);

    83: // void eNack(void) ;   //停止继续读

    84: // void eAck(void) ; //发送继续读信号

    85: // void DelayMS(unsigned char val);

    86: // void DelayUS(void);//10us

    87: // void Write24C32(unsigned char eAddr,unsigned char numb,unsigned char *ptr);

    88: // void Read24C32(unsigned char eAddr,unsigned char numb,unsigned char *ptr);

    89: // unsigned char eReceive(void);

    90: 

    91: 

    92: 

    93: 

    94: //****************************************************************

    95: //***************************** 主程序 ****************************

    96: //****************************************************************

    97: void main (void)

    98: {

    99:     SysIni();

   100: while(1)

   101:   {

   102:     if(tmrCommRx)

   103:     {

   104:         // 操作请求

   105:         status1 = Mf500PiccRequest(PICC_REQALL, tt1);//

   106:         if (status1==MI_OK)

   107:         // 读物理卡号

   108:             status1=RC500GetSnr(Snr_RC500);

   109:         if (status1==MI_OK)

   110:         // 防碰撞

   111:             status1=Mf500PiccAnticoll(0,Snr_RC500);

   112:         if (status1==MI_OK)

   113:         {

   114:         // 选择卡

   115:             status1=Mf500PiccSelect(Snr_RC500,sak1);

   116:             Flag.CardIn=1;// 读到卡

   117:            // BeepBeep(1,8);// 调试

   118:             tmrReadCard=0;

   119:             if ((Snr_RC500[0]==Snr_Temp[0])&&

   120:                 (Snr_RC500[1]==Snr_Temp[1])&&

   121:                 (Snr_RC500[2]==Snr_Temp[2])&&

   122:                 (Snr_RC500[3]==Snr_Temp[3]))

   123:             {

   124:                 Flag.CardSame=1;

   125:             }

   126:             else

   127:             {

   128:                 Flag.CardSame=0;

   129:                 Snr_Temp[0]=Snr_RC500[0];

   130:                 Snr_Temp[1]=Snr_RC500[1];

   131:                 Snr_Temp[2]=Snr_RC500[2];

   132:                 Snr_Temp[3]=Snr_RC500[3];

   133:             }

   134:         }

   135:     }

   136:     if (Flag.Over50ms)

   137:     {

   138:         Flag.Over50ms=0;

   139:         if (Flag.cRxOver)

   140:         {

   141:              CommRx();

   142:              Flag.cRxOver=0;

   143:              cRxCunt=0;

   144:         }

   145:         LEDControl();

   146:         BeepControl();

   147:     }

   148:   }

   149: }

   150: unsigned char HexToChar(unsigned char Hex)

   151: {

   152: unsigned char CharByte;

   153:     if (Hex<0x0a)

   154:     {

   155:         CharByte=Hex+0x30;

   156:     }

   157:     else

   158:     {

   159:         Hex-=9;

   160:         CharByte=Hex+0x40;

   161:     }

   162:     return CharByte;

   163: }

   164: unsigned char CharToHex(unsigned char Char1,unsigned char Char2)

   165: {

   166: unsigned char Hex;

   167: 

   168:     if (Char1 < 'A')

   169:     {

   170:         Char1 -= 0x30;

   171:     }

   172:     else

   173:     {

   174:         Char1 -= 0x40;

   175:         Char1 += 9;

   176:     }

   177: 

   178:     if (Char2 < 'A')

   179:     {

   180:         Char2 -= 0x30;

   181:     }

   182:     else

   183:     {

   184:         Char2 -= 0x40;

   185:         Char2 += 9;

   186:     }

   187:     Hex = (Char1<<4)|Char2;

   188:     return Hex;

   189: }

   190: interrupt intserv(void)

   191: {

   192:     unsigned char iRxByte;

   193:     if ((RCIF)&&(RCIE))

   194:     {

   195:         tmrCommRx=0;

   196:         iRxByte=RCREG;

   197:         if ((FERR)||(OERR))

   198:         {

   199:             SPEN=0;

   200:             SPEN=1;

   201:             RCREG==RCREG;

   202:         }

   203:         else

   204:         {

   205:             Sta.CommErr=0;

   206:             tmrCommErr=0;

   207:             CommBuff[cRxCunt]=iRxByte;

   208:             cRxCunt++;

   209:         }

   210:     }

   211:     if (T0IF)//1.45ms

   212:     {

   213:         T0IF=0;

   214:         tmrCommRx++;

   215:         tmr50ms++;

   216: 

   217:         if (tmrCommRx==0) tmrCommRx=1;

   218:         if ((tmrCommRx>=3)&&(cRxCunt))

   219:         {

   220:             Flag.cRxOver=1;

   221:         }

   222:     // 50ms

   223:         if (tmr50ms>=68)

   224:         {

   225:             tmr50ms=0;

   226:             Flag.Over50ms=1;

   227:             tmrBeep++;

   228:             tmrLed++;

   229:             tmr500ms++;

   230:             tmrCommErr++;

   231:             if (tmrBeep>=BeepHoldTmr) {Flag.BeepOver=1;tmrBeep=0;}

   232:             if (tmrLed>=LedHoldTmr) {Flag.LedOver=1;tmrLed=0;}

   233:             if (tmrCommErr>42)

   234:             {

   235:                 Sta.CommErr=1;

   236:                 LedHoldTmr=5;//每秒闪两次,亮250ms,灭250ms

   237:             }

   238: 

   239:     // 500ms

   240:             if (tmr500ms>=10)

   241:             {

   242:                 tmr500ms=0;

   243:                 tmrReadCard++;

   244:                 if (tmrReadCard>=8)

   245:                 {

   246:                     Flag.CardIn=0;

   247:                     Snr_Temp[0]=0xff;

   248:                     Snr_Temp[1]=0xff;

   249:                     Snr_Temp[2]=0xff;

   250:                     Snr_Temp[3]=0xff;

   251:                     tmrReadCard=0;

   252:                 }

   253: 

   254:             }

   255:         }

   256: 

   257:     }

   258:     if (RBIF)

   259:     {

   260:         RBIE=0;

   261:         RBIF=0;

   262:     }

   263:     if (INTF)

   264:     {

   265:         INTF=0;

   266:         INTE=0;

   267:     }

   268: }

   269: #include "code\rc500.c"

   270: #include "code\comm.c"

   271: 

   272: void Copy(unsigned char *ptr1,unsigned char *ptr2,unsigned char Numb)

   273: {

   274: unsigned char i;

   275:     while(Numb)

   276:     {

   277:         ptr2[i]=ptr1[i];

   278:         Numb--;

   279:         i++;

   280:     }

   281: }

   282: 

   283: void BeepBeep(unsigned char cunt,unsigned char Hold)

   284: {

   285:     BBcunt=cunt;

   286:     BeepHoldTmr=Hold;

   287: }

   288: 

   289: void BeepControl(void)

   290: {

   291:     if (Flag.BeepOver)

   292:     {

   293:         if (Sta.BEEP_ON)

   294:         {

   295:             BeepOff();

   296:             Sta.BEEP_ON=0;

   297:             BBcunt--;

   298:             tmrBeep=0;

   299:         }

   300:         else

   301:         {

   302:             if (BBcunt)

   303:             {

   304:                 BeepOn();

   305:                 Sta.BEEP_ON=1;

   306:                 tmrBeep=0;

   307:             }

   308:             else

   309:             {

   310:                 BeepOff();

   311:             }

   312:         }

   313:     }

   314:     Flag.BeepOver=0;

   315: }

   316: void LED_R_Flash(unsigned char cunt,unsigned char timer)

   317: {

   318:     LEDcunt=cunt;

   319:     LedHoldTmr=timer*2;

   320:     Sta.CommErr=0;

   321:     Flag.LedOver=1;

   322:     tmrLed=0;

   323:     Sta.LED_R_ON=0;

   324: }

   325: // LED 控制

   326: void LEDControl(void)

   327: {

   328:     if (!Flag.LedOver)

   329:         return;

   330:     Flag.LedOver=0;

   331:     if (Sta.CommErr) // 通信错误,2秒无通信

   332:     {

   333:         if (Sta.LED_R_ON)

   334:         {

   335:             Sta.LED_R_ON=0;

   336:             LED_R_OFF();

   337:             LED_G_OFF();

   338:         }

   339:         else

   340:         {

   341:             LED_G_OFF();

   342:             Sta.LED_R_ON=1;

   343:             LED_R_ON();

   344:         }

   345:     }

   346:     else

   347:     {

   348: 

   349:         if (LEDcunt)

   350:         {

   351:             if (Sta.LED_R_ON)

   352:             {

   353:                 LED_R_OFF();

   354:                 LED_G_OFF();

   355:                 Sta.LED_R_ON=0;

   356:                 LEDcunt--;

   357:             }

   358:             else

   359:             {

   360:                 LED_R_ON();

   361:                 LED_G_OFF();

   362:                 Sta.LED_R_ON=1;

   363: 

   364:             }

   365:             tmrCommErr=0;

   366:         }

   367: //         else

   368: //         {

   369: //             LED_G_ON();

   370: //             LED_R_OFF();

   371: //         }

   372: 

   373:     }

   374: 

   375: }

   376: void SysIni(void)

   377: {

   378:     unsigned int i;

   379: 

   380:     STATUS=0;

   381:     INTCON=0x0;

   382: 

   383:     for(i=0;i<650;i++);         //for(i=0;i<550;i++);

   384: 

   385:     ADCON0=adcon0_ini;          //adc 初始化

   386:     ADCON1=adcon1_ini;

   387: 

   388:     TRISA=trisa_ini;            //io 口初始化

   389:     TRISB=trisb_ini;

   390:     TRISC&=0xf2;

   391:     PORTA=porta_ini;

   392:     PORTB=portb_ini;

   393:     PORTC=portc_ini;

   394: 

   395:     OPTION=option_ini;          //定时器0 初始化

   396:     TMR0=timer0_ini;

   397:     T0IF=0;

   398: 

   399:     T1CON=t1con_ini;            //定时器1 初始化

   400:     TMR1L=timer1l_ini;

   401:     TMR1H=timer1h_ini;

   402:     TMR1IF=0;

   403: 

   404:     T2CON=t2con_ini;            //定时器 2 初始化

   405:     TMR2=timer2_ini;

   406:     TMR2IF=0;

   407: 

   408:     clrwdt();

   409: //     eStop();

   410:     ADCON1=adcon1_ini;

   411:     ADCON0=adcon0_ini;          //adc 初始化

   412:     rc500_rst = 0;

   413:     rc500_cs  = 1;              // enable the cs for rc500

   414:     rc500_wr  = 1;

   415:     rc500_rd  = 1;

   416:     rc500_ale = 0;

   417: 

   418:     RC500Config();           // Initialise the RC500

   419:     RC500OutSelect(mfout);

   420:     MyAddr=0x31;

   421: //     Read24C32(E2Addr_Baud,1,&Baud);

   422: 

   423:     if (Baud!=35)

   424:     {

   425:         Baud=71;

   426:     }

   427:     SPBRG=Baud;

   428:     RCSTA=rxdsta_ini;          //串口初始化

   429:     TXSTA=txdsta_ini;

   430:     RCIE=1;

   431:     INTCON=0xE0;

   432: 

   433:     BeepBeep(2,8);

   434:     Sta.CommErr=0;

   435:     tmrCommErr=0;

   436:     LED_R_Flash(1,5);

   437: }

   438: //#include "code\a24c01.c"

   439: //#include "code\a24c32.c"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -