📄 m500auc.lst
字号:
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE M500AUC
OBJECT MODULE PLACED IN G:\RFCARD~1\下位机~1\扩展板\M500AUC.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE G:\RFCARD~1\下位机~1\扩展板\M500AUC.C DB SB OE
stmt level source
1 #define M500_GLOBALS
2
3 #include <string.h>
4 #include <stdio.h>
5 #include <absacc.h>
6 #include <intrins.h>
7
8 #include "Mfreg500.h"
9 #include "MfErrNo.h"
10 #include "reg52.h"
11 #include "M500AuC.h"
12
13 #define GetRegPage(addr) (0x80 | (addr>>3))
14 #define nocard 0
15 #define mifare1 1
16 #define mifarepro 2
17 #define mifarelight 3
18 #define unknowncard 4
19 #define NO_TIMER2 1
20
21 ///////////////////////////////////////////////////////////////////////
22 // 往一个地址写一个数据
23 // Address: 地址
24 // value: 数据
25 ///////////////////////////////////////////////////////////////////////
26 void WriteRawIO(unsigned char Address,unsigned char value)
27 {
28 1 XBYTE[Address]=value;
29 1 }
30
31 ///////////////////////////////////////////////////////////////////////
32 // 从一个地址读出一个数据
33 // Address: 地址
34 // value: 数据
35 ///////////////////////////////////////////////////////////////////////
36 unsigned char ReadRawIO(unsigned char Address)
37 {
38 1 return XBYTE[Address];
39 1 }
40
41 ///////////////////////////////////////////////////////////////////////
42 // 往一个地址写一个数据(EEPROM)
43 // Address: 地址
44 // value: 数据
45 ///////////////////////////////////////////////////////////////////////
46 void WriteIO(unsigned char Address, unsigned char value)
47 {
48 1 WriteRawIO(0x00,GetRegPage(Address));
49 1 WriteRawIO(Address,value);
50 1 }
51
52 ///////////////////////////////////////////////////////////////////////
53 // 从一个地址读出一个数据(EEPROM)
54 // Address: 地址
55 // value: 数据
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 2
56 ///////////////////////////////////////////////////////////////////////
57 unsigned char ReadIO(unsigned char Address)
58 {
59 1 WriteRawIO(0x00,GetRegPage(Address));
60 1 return ReadRawIO(Address);
61 1 }
62
63 ///////////////////////////////////////////////////////////////////////
64 // 设置定时时间
65 // tmoLength: 定时时间长度
66 ///////////////////////////////////////////////////////////////////////
67 void M500PcdSetTmo(unsigned char tmoLength)
68 {
69 1 switch(tmoLength)
70 1 {
71 2 case 1:
72 2 WriteIO(RegTimerClock,0x07);
73 2 WriteIO(RegTimerReload,0x6a);
74 2 break;
75 2 case 2:
76 2 WriteIO(RegTimerClock,0x07);
77 2 WriteIO(RegTimerReload,0xa0);
78 2 break;
79 2 case 3:
80 2 WriteIO(RegTimerClock,0x09);
81 2 WriteIO(RegTimerReload,0xa0);
82 2 break;
83 2 case 4:
84 2 WriteIO(RegTimerClock,0x09);
85 2 WriteIO(RegTimerReload,0xff);
86 2 break;
87 2 case 5:
88 2 WriteIO(RegTimerClock,0x0b);
89 2 WriteIO(RegTimerReload,0xff);
90 2 break;
91 2 case 6:
92 2 WriteIO(RegTimerClock,0x0d);
93 2 WriteIO(RegTimerReload,0xff);
94 2 break;
95 2 case 7:
96 2 WriteIO(RegTimerClock,0x0f);
97 2 WriteIO(RegTimerReload,0xff);
98 2 break;
99 2 default:
100 2 WriteIO(RegTimerClock,0x07);
101 2 WriteIO(RegTimerReload,tmoLength);
102 2 break;
103 2 }
104 1 }
105
106 ///////////////////////////////////////////////////////////////////////
107 // Request Command defined in ISO14443(Mifare)
108 // cmd: RC500 指令
109 // rcv: 接收指令返回值的地址
110 // info: 接收命令返回信息的地址???????????????????
111 ///////////////////////////////////////////////////////////////////////
112 char M500PcdCmd(unsigned char cmd,
113 volatile unsigned char data *rcv,
114 MfCmdInfo idata *info)
115 {
116 1 char idata status = MI_OK;
117 1 char idata tmpStatus ;
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 3
118 1 unsigned char idata lastBits;
119 1 unsigned int idata timecnt = 0;
120 1 unsigned char idata irqEn = 0x00;
121 1 unsigned char idata waitFor = 0x00;
122 1 unsigned char idata timerCtl = 0x00;
123 1
124 1 WriteIO(RegInterruptEn,0x7F);
125 1 WriteIO(RegInterruptRq,0x7F);
126 1 WriteIO(RegCommand,PCD_IDLE);
127 1
128 1 FlushFIFO();
129 1 MpIsrInfo = info;
130 1 MpIsrOut = rcv;
131 1 info->irqSource = 0x00;
132 1 switch(cmd)
133 1 {
134 2 case PCD_IDLE:
135 2 irqEn = 0x00;
136 2 waitFor = 0x00;
137 2 break;
138 2 case PCD_WRITEE2:
139 2 irqEn = 0x11;
140 2 waitFor = 0x10;
141 2 break;
142 2 case PCD_READE2:
143 2 irqEn = 0x07;
144 2 waitFor = 0x04;
145 2 break;
146 2 case PCD_LOADCONFIG:
147 2 case PCD_LOADKEYE2:
148 2 case PCD_AUTHENT1:
149 2 irqEn = 0x05;
150 2 waitFor = 0x04;
151 2 break;
152 2 case PCD_CALCCRC:
153 2 irqEn = 0x11;
154 2 waitFor = 0x10;
155 2 break;
156 2 case PCD_AUTHENT2:
157 2 irqEn = 0x04;
158 2 waitFor = 0x04;
159 2 break;
160 2 case PCD_RECEIVE:
161 2 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);
162 2 irqEn = 0x06;
163 2 waitFor = 0x04;
164 2 break;
165 2 case PCD_LOADKEY:
166 2 irqEn = 0x05;
167 2 waitFor = 0x04;
168 2 break;
169 2 case PCD_TRANSMIT:
170 2 irqEn = 0x05;
171 2 waitFor = 0x04;
172 2 break;
173 2 case PCD_TRANSCEIVE:
174 2 info->nBitsReceived = -(ReadIO(RegBitFraming) >> 4);
175 2 irqEn = 0x3D;
176 2 waitFor = 0x04;
177 2 break;
178 2 default:
179 2 status = MI_UNKNOWN_COMMAND;
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 4
180 2 }
181 1 if (status == MI_OK)
182 1 {
183 2 irqEn |= 0x20;
184 2 waitFor |= 0x20;
185 2 timecnt=1000;
186 2 WriteIO(RegInterruptEn,irqEn | 0x80);
187 2 WriteIO(RegCommand,cmd);
188 2 while (!(MpIsrInfo->irqSource & waitFor||!(timecnt--)));
189 2 WriteIO(RegInterruptEn,0x7F);
190 2 WriteIO(RegInterruptRq,0x7F);
191 2 SetBitMask(RegControl,0x04);
192 2 WriteIO(RegCommand,PCD_IDLE);
193 2 if (!(MpIsrInfo->irqSource & waitFor))
194 2 {
195 3 status = MI_ACCESSTIMEOUT;
196 3 }
197 2 else
198 2 {
199 3 status = MpIsrInfo->status;
200 3 }
201 2 if (status == MI_OK)
202 2 {
203 3 if (tmpStatus = (ReadIO(RegErrorFlag) & 0x17))
204 3 {
205 4 if (tmpStatus & 0x01)
206 4 {
207 5 info->collPos = ReadIO(RegCollPos);
208 5 status = MI_COLLERR;
209 5 }
210 4 else
211 4 {
212 5 info->collPos = 0;
213 5 if (tmpStatus & 0x02)
214 5 {
215 6 status = MI_PARITYERR;
216 6 }
217 5 }
218 4 if (tmpStatus & 0x04)
219 4 {
220 5 status = MI_FRAMINGERR;
221 5 }
222 4 if (tmpStatus & 0x10)
223 4 {
224 5 FlushFIFO();
225 5 status = MI_OVFLERR;
226 5 }
227 4 if (tmpStatus & 0x08)
228 4 {
229 5 status = MI_CRCERR;
230 5 }
231 4 if (status == MI_OK)
232 4 status = MI_NY_IMPLEMENTED;
233 4 }
234 3 if (cmd == PCD_TRANSCEIVE)
235 3 {
236 4 lastBits = ReadIO(RegSecondaryStatus) & 0x07;
237 4 if (lastBits)
238 4 info->nBitsReceived += (info->nBytesReceived-1) * 8 + lastBits;
239 4 else
240 4 info->nBitsReceived += info->nBytesReceived * 8;
241 4 }
C51 COMPILER V6.02 M500AUC 02/09/2006 13:25:02 PAGE 5
242 3 }
243 2 else
244 2 {
245 3 info->collPos = 0x00;
246 3 }
247 2 }
248 1 MpIsrInfo = 0;
249 1 MpIsrOut = 0;
250 1 return status;
251 1 }
252
253 ///////////////////////////////////////////////////////////////////////
254 // 置一个bit
255 // reg: 寄存器名
256 // mask: 掩码值
257 ///////////////////////////////////////////////////////////////////////
258 char SetBitMask(unsigned char reg,unsigned char mask)
259 {
260 1 char idata tmp = 0x00;
261 1
262 1 tmp = ReadIO(reg);
263 1 WriteIO(reg,tmp | mask); // set bit mask
264 1 return 0x00;
265 1 }
266
267 ///////////////////////////////////////////////////////////////////////
268 // 清一个bit
269 // reg: 寄存器名
270 // mask: 掩码值
271 ///////////////////////////////////////////////////////////////////////
272 char ClearBitMask(unsigned char reg,unsigned char mask)
273 {
274 1 char idata tmp = 0x00;
275 1
276 1 tmp = ReadIO(reg);
277 1 WriteIO(reg,tmp & ~mask); // clear bit mask
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -