📄 sam.lst
字号:
C51 COMPILER V4.01, SAM 19/08/04 14:33:22 PAGE 1
DOS C51 COMPILER V4.01, COMPILATION OF MODULE SAM
OBJECT MODULE PLACED IN D:\13505B\105B\SAM.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\13505B\105B\SAM.C DB SB OE
stmt level source
1 #include "Hardware.h"
2 #include "MfErrNo.h"
3 #include "MfRc500.h"
4 #include <string.h>
5 #include "MFREG.h"
6 #include "PCDUTILS.h"
7 /***********************************************************************/
8
9 extern void W_DOG(void);
10 extern void SendResponse(uchar status,uchar len,uchar *datapr);
11 extern uchar I_receive1(uchar *ch);
12 extern void I_send1(uchar I_data);
13 extern uchar idata snr[5];
14 extern uchar xdata ComBuffer[MAXLEN];
15 extern uchar xdata Auth_code[48];
16
17 uchar idata sw1,sw2;
18 uchar idata rec_bytelen;
19
20 void I_send(uchar I_data)
21 {
22 1 I_send1(I_data);
23 1
24 1 }
25
26 char I_receive()
27 {
28 1 char ch;
29 1 I_receive1(&ch);
30 1 return ch;
31 1 }
32
33
34
35 void Power_on()
36 {
37 1 uint idata i,j;
38 1
39 1 RST1=0;
40 1 IO1=1;
41 1 for(i=0;i<200;i++)
42 1 {
43 2 W_DOG();
44 2 for(j=0;j<30;j++)
45 2 {
46 3 ;
47 3 }
48 2 }
49 1 RST1=1;
50 1 SleepMs(100);
51 1 //SetBitMask(RegTxControl,0x03);
52 1 }
53
54 void Power_off()
55 {
56 1 //PON=1;
57 1 //mifs_close_rf(); /*2002007.17*/
58 1 //ClearBitMask(RegTxControl,0x03);
59 1 SleepMs(50);
C51 COMPILER V4.01, SAM 19/08/04 14:33:22 PAGE 2
60 1 }
61
62
63 void Reset1()
64 {
65 1 uint i,j;
66 1 IO1=1;
67 1 RST1=0;
68 1
69 1 for(i=0;i<400;i++)
70 1 {
71 2 W_DOG();
72 2 for(j=0;j<30;j++)
73 2 {
74 3 ;
75 3 }
76 2 }
77 1 RST1=1;
78 1
79 1 }
80
81
82 /***************************************************/
83 /* SelectADF
84
85 /***************************************************/
86 uchar SelectADF(uchar *dir)
87 {
88 1 uchar temp_buf[2],i,j;
89 1
90 1 W_DOG();
91 1
92 1 I_send(0x00);
93 1 I_send(0xa4);
94 1 I_send(0x00);
95 1 I_send(0x00);
96 1 I_send(0x02);
97 1
98 1 sw1=I_receive();
99 1
100 1 for(i=0;i<60;i++)
101 1 {
102 2 ;
103 2 }
104 1
105 1 I_send(dir[0]);
106 1 I_send(dir[1]);
107 1
108 1 sw1=I_receive();
109 1 sw2=I_receive();
110 1
111 1 if(sw1!=0x61)
112 1 {
113 2 if((sw1==0x90)&&(sw2==0x00)) return MI_OK;
114 2 else
115 2 {
116 3 return SAM_ADF_ERROR;
117 3 }
118 2 }
119 1
120 1 for(i=0;i<60;i++)
121 1 {
122 2 ;
123 2 }
124 1
125 1 j=sw2+2;
C51 COMPILER V4.01, SAM 19/08/04 14:33:22 PAGE 3
126 1 I_send(0x00);
127 1 I_send(0xc0);
128 1 I_send(0x00);
129 1 I_send(0x00);
130 1 I_send(sw2);
131 1
132 1 sw1=I_receive();
133 1 for(i=0;i<j;i++)
134 1 {
135 2 temp_buf[0]=I_receive();
136 2 }
137 1
138 1 return MI_OK;
139 1 }
140 /*
141 卡片的认证码区格式:
142 0-1:城市代码 2-3:发行流水号低2字节
143 4-43:10个认证码
144 44-47:认证码区的校验码
145 key_index分成2个部分,低4位为DES加密密钥标识(0-15,当为0时使用认证密钥计算扇区密钥)
146 高4位为认证密钥标识(1-10)
147
148 key_id1为认证密钥标识,
149 key_id2为加密密钥标识。
150 */
151 uchar Creat_key(uchar keymode,uchar sector_nr,uchar key_index,uchar* new_key )
152 {
153 1 uchar idata buf[13],i;
154 1 uchar key_no,key_id1,key_id2;
155 1
156 1 W_DOG();
157 1 key_no=(sector_nr<<1);
158 1 if(keymode!=0x00) //11.20 0x00-->0x60
159 1 {
160 2 key_no+=1;
161 2 keymode=PICC_AUTHENT1B;
162 2 }
163 1 else keymode=PICC_AUTHENT1A; //11.20
164 1 key_id1=(key_index&0xF0)>>4;
165 1 key_id2=(key_index&0x0F);
166 1 i=key_id1<<2;
167 1
168 1 memcpy(buf,Auth_code,2);
169 1 memcpy(buf+2,snr,4);
170 1 memcpy(buf+6,Auth_code+2,2);
171 1 memcpy(buf+8,Auth_code+i,4);
172 1 buf[12]=key_no;
173 1
174 1 I_send(0x80);
175 1 I_send(0xfc);
176 1 I_send(key_id2);
177 1 I_send(key_id1);
178 1 I_send(0x0d);
179 1
180 1 sw1=I_receive();
181 1
182 1 for(i=0;i<60;i++)
183 1 {
184 2 ;
185 2 }
186 1
187 1 for(i=0;i<13;i++)
188 1 {
189 2 I_send(buf[i]);
190 2 }
191 1
C51 COMPILER V4.01, SAM 19/08/04 14:33:22 PAGE 4
192 1 sw1=I_receive();
193 1 sw2=I_receive();
194 1 if(sw1!=0x61)
195 1 {
196 2 SendResponse(0x89,1,buf);
197 2 return SAM_CYPRT_ERROR;
198 2 }
199 1 for(i=0;i<60;i++)
200 1 {
201 2 ;
202 2 }
203 1
204 1 I_send(0x00);
205 1 I_send(0xc0);
206 1 I_send(0x00);
207 1 I_send(0x00);
208 1 I_send(6);
209 1
210 1 //Receive INS
211 1 sw1=I_receive();
212 1
213 1 buf[0]=I_receive();
214 1 buf[1]=I_receive();
215 1 buf[2]=I_receive();
216 1 buf[3]=I_receive();
217 1 buf[4]=I_receive();
218 1 buf[5]=I_receive();
219 1 buf[6]=I_receive();
220 1 buf[7]=I_receive();
221 1 memcpy(new_key,buf,6);
222 1 return MI_OK;
223 1 }
224
225 uchar Creat_key2(uchar keymode,uchar sector_nr,uchar key_index,uchar* new_key)
226 {
227 1 uchar xdata buf[13],i;
228 1 uchar key_no,key_id1,key_id2;
229 1
230 1 W_DOG();
231 1 key_no=(sector_nr<<1);
232 1
233 1 //keymode"分成两部分:前4位为认证码标识,后4位为KEYA/KEYB标识"
234 1
235 1 i=(keymode&0xf0)>>2; //"取认证码标识"
236 1 if((keymode&0x0f)!=0)
237 1 {
238 2 key_no+=1; //KEYB
239 2 keymode=PICC_AUTHENT1B;
240 2 }
241 1 else keymode=PICC_AUTHENT1A;
242 1 key_id1=(key_index&0xF0)>>4;
243 1 key_id2=(key_index&0x0F);
244 1
245 1
246 1 memcpy(buf,Auth_code,2);
247 1 memcpy(buf+2,snr,4);
248 1 memcpy(buf+6,Auth_code+2,2);
249 1 memcpy(buf+8,Auth_code+i,4);
250 1 buf[12]=key_no;
251 1
252 1 I_send(0x80);
253 1 I_send(0xfc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -