📄 main.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 + -