?? rfid.lst
字號:
C51 COMPILER V8.16 RFID 12/10/2009 11:17:10 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE RFID
OBJECT MODULE PLACED IN rfid.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rfid.c LARGE BROWSE INTVECTOR(0X1000) DEBUG OBJECTEXTEND
line level source
1 #include "global.h"
2
3 /******************************************************************************
4 ** 函數: Process_Frame()
5 ** 入參: rxdata
6 ** 返回:
7 ** 說明:
8 ******************************************************************************/
9 void Process_Frame()
10 {
11 1 UCHAR i,j,nr;
12 1 UINT idata result;
13 1 ULONG idata sum;
14 1 REPLY_FRAME xdata *reply;
15 1
16 1
17 1 reply=(REPLY_FRAME xdata *)(rxdata+1); //指針偏移 第一位是起始0xfa
18 1 sum = (ULONG)cksum(rxdata+1,16); //求累加和
19 1 result = (UINT)(sum + (sum >> 16)); //實際校驗值
20 1
21 1 memcpy(wiebuf, rxdata+7, 6); //復制卡號用于wiegand發送
22 1 memcpy(TagID,wiebuf,6); //復制標簽卡號用于回命令
23 1
24 1
25 1
26 1
27 1 if((rxdata[2]==PCS_read_TAG)||(rxdata[2]==PCS_wt_OK))
28 1 {
29 2 MSG_LEDG; //LEDG無等待時間閃爍
30 2 tag_r_reader();
31 2 }
32 1
33 1
34 1 if(reply->crc==result) //查看接收的數據校驗是否過
35 1 {
36 2 if(((reply->cmd)&0xf0)==0x00)
37 2 {
38 3 return; //高半字節0的 基站不響應 **
39 3 }
40 2 MSG_LEDG; //LEDG無等待閃
41 2
42 2
43 2 if((TRIG==0)&&(TRIG_STATE==1))
44 2 {
45 3 TRIG_STATE=0; //清標記
46 3 }
47 2 else
48 2 {
49 3 flg_io=reply->tag_flag; //不在觸發時 使用卡的進出
50 3 }
51 2
52 2 for(i=0;i<10;i++) //查看是否是已進入的標簽
53 2 {
54 3
55 3 if(((memcmp(reply->tag_id,tagnr[i].save_id,6)==0))&&(tagnr[i].save_state!=0))
C51 COMPILER V8.16 RFID 12/10/2009 11:17:10 PAGE 2
56 3
57 3 {
58 4 nr=i;
59 4 tagnr[nr].save_state =FLG_OLD;
60 4 break;
61 4 }
62 3 }
63 2
64 2 if(i==10)
65 2 {
66 3 for(j=0;j<10;j++) //新進入的標簽?登記!
67 3 {
68 4 if(tagnr[j].save_state==0)
69 4 {
70 5 nr=j;
71 5 tagnr[nr].save_state =FLG_NEW;
72 5 break;
73 5 }
74 4 }
75 3 }
76 2
77 2 if(nr>10) //防止nr出錯 ,這里可以考慮老化掉登記了最久的卡
78 2 {
79 3 return;
80 3 }
81 2
82 2 switch(tagnr[nr].save_state)
83 2 {
84 3 case FLG_NEW:
85 3 if(1)
86 3 // if(((TRIG==0)&&(TRIG_STATE==1))||(TRIG==1))
87 3 { //觸發狀態加觸發或者非觸發才詢卡
88 4
89 4 SeekFrame(WCMD_SLP); //普通尋卡
90 4 txregframe(FRAME_LEN);
91 4
92 4 }
93 3
94 3 else
95 3 {
96 4 return; //被觸發下 沒觸發不理會收到的數據
97 4 }
98 3
99 3
100 3 for(i=0;i<6;i++)
101 3 {
102 4 tagnr[nr].save_id[i] =reply->tag_id[i]; //復制卡號
103 4 }
104 3
105 3 tagnr[nr].save_io =reply->tag_flag; //進出標記
106 3 tagnr[nr].save_state =FLG_OLD;
107 3 tagnr[nr].save_inactivity =INACTIVITY_TIME; //登記就開啟溢出
108 3
109 3 wiegandout(wiefmt,flg_io); //全新卡需要輸出wiegand
110 3 /*
111 3 for(i=0;i<6;i++)
112 3 {
113 3 if(DEBUG) Printf_Char(reply->tag_id[i]);
114 3 }
115 3 */
116 3 relay_work();
117 3 event_relay=RELAY_TIME_IN;
C51 COMPILER V8.16 RFID 12/10/2009 11:17:10 PAGE 3
118 3 break;
119 3
120 3 case FLG_OLD:
121 3
122 3 for(i=0;i<6;i++) //舊卡只登記并賦值重計算老化時間
123 3 {
124 4 tagnr[nr].save_id[i] =reply->tag_id[i]; //復制卡號
125 4 }
126 3
127 3 tagnr[nr].save_io =reply->tag_flag; //進出標記
128 3 tagnr[nr].save_state =FLG_OLD;
129 3 //tagnr[nr].save_inactivity =INACTIVITY_TIME; //登記就開啟溢出
130 3 //離開卡后再次輸出wie 與每ns輸出區別
131 3
132 3
133 3 if(INACTIVITY_TIME==0) //連續輸出
134 3 {
135 4
136 4
137 4 wiegandout(wiefmt,flg_io); //全新卡需要輸出wieand
138 4
139 4 }
140 3 break; // 老化更新后再次讀到時作新卡輸出
141 3
142 3 default:
143 3 break;
144 3 }
145 2 }
146 1
147 1 else
148 1 {
149 2 // if(DEBUG) Printf_String("\r\n[msg:]crc error");
150 2 }
151 1
152 1 }
153 /******************************************************************************
154 ** 函數: SeekFrame()
155 ** 入參: txdata
156 ** 返回:
157 ** 說明:
158 ******************************************************************************/
159 void SeekFrame(UCHAR cmdd)
160 {
161 1
162 1 ULONG idata sum;
163 1 UINT result;
164 1
165 1 FIND_TAG xdata *seek;
166 1
167 1
168 1
169 1 seek = (FIND_TAG xdata *)(txdata + 4); //指針偏移
170 1 memcpy(txdata, SiHead, 4);
171 1 seek->data_len=sizeof(FIND_TAG)-1; //數據長度
172 1 seek->cmd=cmdd; //命令 01=普通訊卡 02=加卡
173 1 memcpy(seek->reader_id, MyID, 4); //基站系統號
174 1
175 1
176 1 switch(cmdd)
177 1 {
178 2 case 0x01: //廣播
179 2 memset(seek->tag_id, 0xff, 6);
C51 COMPILER V8.16 RFID 12/10/2009 11:17:10 PAGE 4
180 2 break;
181 2
182 2 case 0x02: //休眠點卡
183 2 memcpy(seek->tag_id, TagID, 6);
184 2 break;
185 2
186 2
187 2 default: //出錯廣播
188 2 memset(seek->tag_id, 0xff, 6);
189 2 break;
190 2
191 2 }
192 1
193 1 seek->tag_flag=0x55; //詢問時填充卡的進出標記任意數據
194 1 seek->skey[0]=0xff; //處理密鑰
195 1 seek->skey[1]=0xff;
196 1 seek->skey[2]=0xff;
197 1 seek->skey[3]=0xff;
198 1 sum = (ULONG)cksum(txdata+4,sizeof(FIND_TAG)-2-1); //從長度開始算SUM
199 1
200 1 result = (UINT)(sum + (sum >> 16));
201 1 seek->crc=result; //處理校驗
202 1 }
203
204
205
206
207
208
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1037 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 7
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- 10
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -