📄 zlg500.lst
字号:
C51 COMPILER V7.20 ZLG500 03/12/2008 18:52:54 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE ZLG500
OBJECT MODULE PLACED IN zlg500.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE zlg500.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg52.h"
2 #include "string.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define ulong unsigned long
6
7 //define spi
8 #define SPI_REN() IE0=0;EX0=1
9 #define SPI_RDIS() EX0=0
10
11 //spi Error
12 #define SPI_OK 0
13 #define SPI_ERR 255
14
15 extern uchar spi_send(uchar idata *dp,uchar lenght);
16 extern uchar spi_rcv(uchar idata *dp);
17 extern uchar spi_init(void);
18
19 uchar idata spi_buffer[26];
20 //define spi_buffer
21 #define SEQNR 0
22 #define COMMAND 1
23 #define STATUS 1
24
25 #define LENGTH 2
26
27 #define MODE 3
28 #define BCNT 3
29 #define ADR 3
30 #define SERNR 3
31 #define SIZE 3
32 #define TIME 3
33 #define TAGTYPE 3
34 #define INFO 3
35 #define DATA 3
36
37 #define SECNR 4
38 #define DATABYTES 4
39 #define VALUE 4
40
41 #define NKEY 5
42
43 #define AUTHMODE 7
44 #define ADRCHKWR 8
45 #define DATACHKWR 9
46
47 bit bdata newdata=0;
48 //mifare error
49 #define MI_OK 0
50 #define MI_CRCERR 2
51
52 //Timer 0
53 #define OSC_FREQ 11059200L //MCU晶振频率
54 #define EVLT_50MS 65536L-OSC_FREQ/240L //50ms的初值
55 #define H_50MS EVLT_50MS>>8
C51 COMPILER V7.20 ZLG500 03/12/2008 18:52:54 PAGE 2
56 #define L_50MS EVLT_50MS
57 #define T0_evaluate() TH0=H_50MS;TL0=L_50MS; //TH1=0x2c;TL1=0xb0;
58
59 void spi_int(void) interrupt 0 using 1
60 {
61 1 spi_rcv(spi_buffer);
62 1 newdata=1;
63 1 }
64
65 uchar zlg500cmd(uchar length)
66 { uchar spi_wdg=10;
67 1 uchar i,BCC_sum;
68 1
69 1 spi_buffer[length]=spi_buffer[0];
70 1 for(i=1;i<length;i++)
71 1 {
72 2 spi_buffer[length]^=spi_buffer[i];
73 2 }
74 1 spi_buffer[length]=~spi_buffer[length];
75 1
76 1 T0_evaluate();
77 1 if(spi_send(spi_buffer,length+1)!=SPI_OK)
78 1 return SPI_ERR;
79 1
80 1 ET0=0;
81 1 TF0=0;
82 1 TR0=1;
83 1 SPI_REN();
84 1 while(newdata==0&&spi_wdg!=0)
85 1 {
86 2 if(TF0==1)
87 2 {
88 3 T0_evaluate();TF0=0;
89 3 spi_wdg--;
90 3 }
91 2 }
92 1 TR0=0;
93 1 SPI_RDIS();
94 1
95 1 if(newdata==0) return SPI_ERR;
96 1 newdata=0;
97 1
98 1
99 1 BCC_sum=spi_buffer[0];
100 1 for(i=1;i<(spi_buffer[LENGTH]+3);i++)
101 1 {
102 2 BCC_sum^=spi_buffer[i];
103 2 }
104 1 if(BCC_sum==~spi_buffer[spi_buffer[LENGTH]+3])
105 1 return SPI_OK;
106 1 else return MI_CRCERR;
107 1 }
108
109 uchar mifs_request(uchar _Mode,uchar idata *_TagType)
110 {
111 1 spi_buffer[SEQNR]=0;
112 1 spi_buffer[COMMAND]=0x41;
113 1 spi_buffer[LENGTH]=0x01;
114 1 spi_buffer[MODE]=_Mode;
115 1
116 1 if(zlg500cmd(4)!=SPI_OK)
117 1 return SPI_ERR;
C51 COMPILER V7.20 ZLG500 03/12/2008 18:52:54 PAGE 3
118 1
119 1 if(spi_buffer[STATUS]==MI_OK)
120 1 {
121 2 _TagType[0]=spi_buffer[TAGTYPE];
122 2 _TagType[1]=spi_buffer[TAGTYPE+1];
123 2 }
124 1 return spi_buffer[STATUS];
125 1 }
126
127 uchar mifs_anticoll(uchar _Bcnt,uchar idata *_SNR)
128 {
129 1 spi_buffer[SEQNR]=0;
130 1 spi_buffer[COMMAND]=0x42;
131 1 spi_buffer[LENGTH]=0x01;
132 1 spi_buffer[MODE]=_Bcnt;
133 1
134 1 if(zlg500cmd(4)!=SPI_OK)
135 1 return SPI_ERR;
136 1
137 1 if(spi_buffer[STATUS]==MI_OK)
138 1 {
139 2 memcpy(_SNR,&spi_buffer[SERNR],4);
140 2 }
141 1 return spi_buffer[STATUS];
142 1 }
143
144 uchar mifs_select(uchar idata *_SNR,uchar idata *_Size)
145 {
146 1 spi_buffer[SEQNR]=0;
147 1 spi_buffer[COMMAND]=0x43;
148 1 spi_buffer[LENGTH]=0x04;
149 1 memcpy(&spi_buffer[SERNR],_SNR,4);
150 1
151 1 if(zlg500cmd(7)!=SPI_OK)
152 1 return SPI_ERR;
153 1
154 1 if(spi_buffer[STATUS]==MI_OK)
155 1 {
156 2 *_Size=spi_buffer[SIZE];
157 2 }
158 1 return spi_buffer[STATUS];
159 1 }
160
161 uchar mifs_authentication(uchar _Mode,uchar _SecNr)
162 {
163 1 spi_buffer[SEQNR]=0;
164 1 spi_buffer[COMMAND]=0x44;
165 1 spi_buffer[LENGTH]=0x02;
166 1 spi_buffer[MODE]=_Mode;
167 1 spi_buffer[SECNR]=_SecNr;
168 1
169 1 if(zlg500cmd(5)!=SPI_OK)
170 1 return SPI_ERR;
171 1
172 1 return spi_buffer[STATUS];
173 1 }
174
175 uchar mifs_authentication2(uchar _Mode,uchar _SecNr,uchar _KeyNr)
176 {
177 1 spi_buffer[SEQNR]=0;
178 1 spi_buffer[COMMAND]=0x72;
179 1 spi_buffer[LENGTH]=0x03;
C51 COMPILER V7.20 ZLG500 03/12/2008 18:52:54 PAGE 4
180 1 spi_buffer[MODE]=_Mode;
181 1 spi_buffer[SECNR]=_SecNr;
182 1 spi_buffer[DATA+2]=_KeyNr;
183 1
184 1 if(zlg500cmd(6)!=SPI_OK)
185 1 return SPI_ERR;
186 1
187 1 return spi_buffer[STATUS];
188 1 }
189
190 uchar mifs_authKey(uchar _Mode,uchar _SecNr,uchar *_Key)
191 {
192 1 spi_buffer[SEQNR]=0;
193 1 spi_buffer[COMMAND]=0x73;
194 1 spi_buffer[LENGTH]=0x08;
195 1 spi_buffer[DATA]=_Mode;
196 1 spi_buffer[DATA+1]=_SecNr;
197 1 memcpy(&spi_buffer[DATA+2],_Key,6);
198 1
199 1 if(zlg500cmd(11)!=SPI_OK)
200 1 return SPI_ERR;
201 1
202 1 return spi_buffer[STATUS];
203 1 }
204
205 uchar mifs_halt(void)
206 {
207 1 spi_buffer[SEQNR]=0;
208 1 spi_buffer[COMMAND]=0x45;
209 1 spi_buffer[LENGTH]=0x00;
210 1
211 1 if(zlg500cmd(3)!=SPI_OK)
212 1 return SPI_ERR;
213 1
214 1 return spi_buffer[STATUS];
215 1 }
216
217 uchar mifs_read(uchar _Adr,uchar idata *_Data)
218 {
219 1 spi_buffer[SEQNR]=0;
220 1 spi_buffer[COMMAND]=0x46;
221 1 spi_buffer[LENGTH]=0x01;
222 1 spi_buffer[ADR]=_Adr;
223 1
224 1 if(zlg500cmd(4)!=SPI_OK)
225 1 return SPI_ERR;
226 1
227 1 if(spi_buffer[STATUS]==MI_OK)
228 1 {
229 2 memcpy(_Data,&spi_buffer[DATABYTES-1],16);
230 2 }
231 1 return spi_buffer[STATUS];
232 1 }
233
234 uchar mifs_write(uchar _Adr,uchar idata *_Data)
235 {
236 1 spi_buffer[SEQNR]=0;
237 1 spi_buffer[COMMAND]=0x47;
238 1 spi_buffer[LENGTH]=17;
239 1 spi_buffer[ADR]=_Adr;
240 1 memcpy(&spi_buffer[DATABYTES],_Data,16);
241 1
C51 COMPILER V7.20 ZLG500 03/12/2008 18:52:54 PAGE 5
242 1 if(zlg500cmd(20)!=SPI_OK)
243 1 return SPI_ERR;
244 1
245 1 return spi_buffer[STATUS];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -