📄 src632.lst
字号:
C51 COMPILER V7.50 SRC632 07/25/2008 17:05:20 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SRC632
OBJECT MODULE PLACED IN src632.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE src632.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REGX52.H>
2 #include <main.h>
3 #include <iso14443b.h>
4 #include <src632.h>
5 #include <string.h>
6 #include <intrins.h>
7
8 #define FSD 64
9
10 extern struct TranSciveBuffer{unsigned char MfCommand;
11 unsigned int MfLength;
12 unsigned char MfData[64];
13 };
14
15 /////////////////////////////////////////////////////////////////////
16 //写RC632寄存器
17 //input:Address=寄存器地址
18 // value=要写入的值
19 /////////////////////////////////////////////////////////////////////
20 void WriteRawRC(unsigned char Address, unsigned char value)
21 {
22 1
23 1 unsigned char xdata *pa;
24 1
25 1 pa=Base_addr;
26 1
27 1 RC632_CE = 0;
28 1
29 1 *pa=Address>>3;
30 1 pa=Address+Base_addr;
31 1 *pa=value;
32 1
33 1 RC632_CE = 1;
34 1 }
35 /////////////////////////////////////////////////////////////////////
36 //置RC632寄存器位
37 //input:reg=寄存器地址
38 // mask=置位值
39 /////////////////////////////////////////////////////////////////////
40 void SetBitMask(unsigned char reg,unsigned char mask)
41 {
42 1 char tmp = 0x0;
43 1 tmp = ReadRawRC(reg);
44 1 WriteRawRC(reg,tmp | mask); // set bit mask
45 1 }
46
47 /////////////////////////////////////////////////////////////////////
48 //清RC632寄存器位
49 //input:reg=寄存器地址
50 // mask=清位值
51 /////////////////////////////////////////////////////////////////////
52 void ClearBitMask(unsigned char reg,unsigned char mask)
53 {
54 1 char tmp = 0x0;
55 1 tmp = ReadRawRC(reg);
C51 COMPILER V7.50 SRC632 07/25/2008 17:05:20 PAGE 2
56 1 WriteRawRC(reg, tmp & ~mask);
57 1 }
58
59 /////////////////////////////////////////////////////////////////////
60 //读RC632寄存器位
61 //input:Address=寄存器地址
62 //ouput:读出的值
63 /////////////////////////////////////////////////////////////////////
64 unsigned char ReadRawRC(unsigned char Address)
65 {
66 1
67 1 static unsigned char xdata *pa;
68 1 static unsigned char temp;
69 1
70 1 pa=Base_addr;
71 1
72 1 RC632_CE = 0;
73 1
74 1 *pa=Address>>3;
75 1 pa=Address+Base_addr;
76 1 temp = *pa;
77 1
78 1 RC632_CE = 1;
79 1
80 1 return(temp);
81 1 }
82
83 /////////////////////////////////////////////////////////////////////
84 //设置RC632定时器
85 //input:tmolength=设置值
86 /////////////////////////////////////////////////////////////////////
87 void PcdSetTmo(unsigned char tmoLength)
88 {
89 1 switch(tmoLength)
90 1 {
91 2 case 0: // (0.302 ms) FWI=0
92 2 WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
93 2 WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h21 =33(dec)
94 2 break;
95 2 case 1: // (0.604 ms) FWI=1
96 2 WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
97 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
98 2 break;
99 2 case 2: // (1.208 ms) FWI=2
100 2 WriteRawRC(RegTimerClock,0x07); // TAutoRestart=0,TPrescale=128
101 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
102 2 break;
103 2 case 3: // (2.416 ms) FWI=3
104 2 WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
105 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
106 2 break;
107 2 case 4: // (4.833 ms) FWI=4
108 2 WriteRawRC(RegTimerClock,0x09); // TAutoRestart=0,TPrescale=4*128
109 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
110 2 break;
111 2 case 5: // (9.666 ms) FWI=5
112 2 WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
113 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
114 2 break;
115 2 case 6: // (19.33 ms) FWI=6
116 2 WriteRawRC(RegTimerClock,0x0B); // TAutoRestart=0,TPrescale=16*128
117 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
C51 COMPILER V7.50 SRC632 07/25/2008 17:05:20 PAGE 3
118 2 break;
119 2 case 7: // (38.66 ms) FWI=7
120 2 WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
121 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
122 2 break;
123 2 case 8: // (77.32 ms) FWI=8
124 2 WriteRawRC(RegTimerClock,0x0D); // TAutoRestart=0,TPrescale=64*128
125 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
126 2 break;
127 2 case 9: // (154.6 ms) FWI=9
128 2 WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
129 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h41 =65(dec)
130 2 break;
131 2 case 10: // (309.3 ms) FWI=10
132 2 WriteRawRC(RegTimerClock,0x0F); // TAutoRestart=0,TPrescale=256*128
133 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
134 2 break;
135 2 case 11: // (618.6 ms) FWI=11
136 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
137 2 WriteRawRC(RegTimerReload,0x11);// TReloadVal = 'h21 =17(dec)
138 2 break;
139 2 case 12: // (1.2371 s) FWI=12
140 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
141 2 WriteRawRC(RegTimerReload,0x21);// TReloadVal = 'h41 =33(dec)
142 2 break;
143 2 case 13: // (2.4742 s) FWI=13
144 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
145 2 WriteRawRC(RegTimerReload,0x41);// TReloadVal = 'h81 =65(dec)
146 2 break;
147 2 case 14: // (4.9485 s) FWI=14
148 2 WriteRawRC(RegTimerClock,0x13); // TAutoRestart=0,TPrescale=4096*128
149 2 WriteRawRC(RegTimerReload,0x81);// TReloadVal = 'h81 =129(dec)
150 2 break;
151 2 case 15: // (4.9485 s) FWI=14
152 2 WriteRawRC(RegTimerClock,0x9); // TAutoRestart=0,TPrescale=4096*128
153 2 WriteRawRC(RegTimerReload,0x0ff);// TReloadVal = 'h81 =129(dec)
154 2 break;
155 2 default: //
156 2 WriteRawRC(RegTimerClock,0x19); // TAutoRestart=0,TPrescale=128
157 2 WriteRawRC(RegTimerReload,tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
158 2 break;
159 2 }
160 1 WriteRawRC(RegTimerControl,0X06);
161 1 }
162
163
164 /////////////////////////////////////////////////////////////////////
165 //通过RC632和ISO14443卡通讯
166 //input: pi->MfCommand = RC632命令字
167 // pi->MfLength = 发送的数据长度
168 // pi->MfData[] = 发送数据
169 //output:status = 错误字
170 // pi->MfLength = 接收的数据BIT长度
171 // pi->MfData[] = 接收数据
172 /////////////////////////////////////////////////////////////////////
173 char PcdComTransceive(struct TranSciveBuffer *pi)
174 {
175 1 bit recebyte = 0;
176 1 char status;
177 1 unsigned char irqEn = 0x00;
178 1 unsigned char waitFor = 0x00;
179 1 unsigned char lastBits;
C51 COMPILER V7.50 SRC632 07/25/2008 17:05:20 PAGE 4
180 1 unsigned char n;
181 1 unsigned int i;
182 1 switch (pi->MfCommand)
183 1 {
184 2 case PCD_IDLE:
185 2 irqEn = 0x00;
186 2 waitFor = 0x00;
187 2 break;
188 2 case PCD_WRITEE2:
189 2 irqEn = 0x11;
190 2 waitFor = 0x10;
191 2 break;
192 2 case PCD_READE2:
193 2 irqEn = 0x07;
194 2 waitFor = 0x04;
195 2 recebyte=1;
196 2 break;
197 2 case PCD_LOADCONFIG:
198 2 case PCD_LOADKEYE2:
199 2 case PCD_AUTHENT1:
200 2 irqEn = 0x05;
201 2 waitFor = 0x04;
202 2 break;
203 2 case PCD_CALCCRC:
204 2 irqEn = 0x11;
205 2 waitFor = 0x10;
206 2 break;
207 2 case PCD_AUTHENT2:
208 2 irqEn = 0x04;
209 2 waitFor = 0x04;
210 2 break;
211 2 case PCD_RECEIVE:
212 2 irqEn = 0x06;
213 2 waitFor = 0x04;
214 2 recebyte=1;
215 2 break;
216 2 case PCD_LOADKEY:
217 2 irqEn = 0x05;
218 2 waitFor = 0x04;
219 2 break;
220 2 case PCD_TRANSMIT:
221 2 irqEn = 0x05;
222 2 waitFor = 0x04;
223 2 break;
224 2 case PCD_TRANSCEIVE:
225 2 irqEn = 0x3D;
226 2 waitFor = 0x04;
227 2 recebyte=1;
228 2 break;
229 2 default:
230 2 pi->MfCommand = MI_UNKNOWN_COMMAND;
231 2 break;
232 2 }
233 1
234 1 if (pi->MfCommand != MI_UNKNOWN_COMMAND)
235 1 {
236 2 WriteRawRC(RegPage,0x00);
237 2 WriteRawRC(RegInterruptEn,0x7F);
238 2 WriteRawRC(RegInterruptRq,0x7F);
239 2 WriteRawRC(RegCommand,PCD_IDLE);
240 2 SetBitMask(RegControl,0x01);
241 2 WriteRawRC(RegInterruptEn,irqEn|0x80);
C51 COMPILER V7.50 SRC632 07/25/2008 17:05:20 PAGE 5
242 2 for (i=0; i<pi->MfLength; i++)
243 2 {
244 3 WriteRawRC(RegFIFOData, pi->MfData[i]);
245 3 }
246 2 WriteRawRC(RegCommand, pi->MfCommand);
247 2 i = 0x3500;
248 2 do
249 2 {
250 3 n = ReadRawRC(RegInterruptRq);
251 3 i--;
252 3 }
253 2 while ((i!=0) && !(n&irqEn&0x20) && !(n&waitFor));
254 2 status = MI_COM_ERR;
255 2 if ((i!=0) && !(n&irqEn&0x20))
256 2 {
257 3 if (!(ReadRawRC(RegErrorFlag)&0x17))
258 3 {
259 4 status = MI_OK;
260 4 if (recebyte)
261 4 {
262 5 n = ReadRawRC(RegFIFOLength);
263 5 lastBits = ReadRawRC(RegSecondaryStatus) & 0x07;
264 5 if (lastBits)
265 5 {
266 6 pi->MfLength = (n-1)*8 + lastBits;
267 6 }
268 5 else
269 5 {
270 6 pi->MfLength = n*8;
271 6 }
272 5 if (n == 0)
273 5 {
274 6 n = 1;
275 6 }
276 5 for (i=0; i<n; i++)
277 5 {
278 6 pi->MfData[i] = ReadRawRC(RegFIFOData);
279 6 }
280 5 }
281 4 }
282 3 else if (ReadRawRC(RegErrorFlag)&0x01)
283 3 {
284 4 status = MI_COLLERR;
285 4 if (recebyte)
286 4 {
287 5 n = ReadRawRC(RegFIFOLength);
288 5 lastBits = ReadRawRC(RegSecondaryStatus) & 0x07;
289 5 if (lastBits)
290 5 {
291 6 pi->MfLength = (n-1)*8 + lastBits;
292 6 }
293 5 else
294 5 {
295 6 pi->MfLength = n*8;
296 6 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -