📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 05/01/2009 01:52:10 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg52.h"
2 #include <string.h>
3 #include <intrins.h>
4 #include <absacc.h>
5 #include "main.h"
6 #include "slrc500.h"
7 #include "iso14443a.h"
8
9
10 bit g_bReceOk; //正确接收到上位机指令标志
11 bit g_bRc500Ok; //RC500复位正常标志
12
13
14 unsigned int data g_cCommand; //接收到的命令码
15 unsigned char data g_cSNR[4]; //M1卡序列号
16 unsigned char g_cCidNad; //
17 unsigned char idata g_cReceBuf[64]; //和上位机通讯时的缓冲区
18
19 struct TranSciveBuffer{unsigned char MfCommand;
20 unsigned int MfLength;
21 unsigned char MfData[64];
22 };
23 void main( )
24 {
25 1
26 1 InitializeSystem( ); //系统初始化
27 1 Rc500Ready( ); //初始化RC500
28 1 PcdConfigISOType( 'A' );
29 1 while ( 1 )
30 1 {
31 2 if (g_bReceOk) //正确接收到上位机指令标志
32 2 {
33 3
34 3 g_bReceOk = 0;//清上位机指令标志
35 3 g_cCommand=g_cReceBuf[0];//从接收缓冲区中读取数据
36 3 switch(g_cCommand)
37 3 {
38 4 case 13:
39 4 ComSetBound(); break;//设置波特率
40 4 case 2:
41 4 ComRequestA(); break;//响应上位机发送的寻A卡命令
42 4 case 3:
43 4 ComAnticoll(); break;//防冲突
44 4 case 4:
45 4 ComSelect(); break;//选卡
46 4 case 5:
47 4 ComM500PiccAuthE2(); break;
48 4 case 6:
49 4 ComM500PcdLoadKeyE2(); break;
50 4 case 1:
51 4 ComHlta(); break;
52 4 case 7:
53 4 ComAuthentication(); break;
54 4 case 8:
55 4 ComM1Read(); break;//读卡
C51 COMPILER V7.06 MAIN 05/01/2009 01:52:10 PAGE 2
56 4 case 9:
57 4 ComM1Write(); break;//写卡
58 4 case 10:
59 4 ComM1Decrement(); break;
60 4 case 11:
61 4 Comsond(); break;
62 4 case 12: // 参数设置
63 4 g_cReceBuf[0]=1; //contact
64 4 g_cReceBuf[1]=0;
65 4 break;
66 4
67 4 }
68 3 ES = 1;
69 3 }
70 2 }
71 1 }
72
73
74
75
76 ///////////////////////////////////////////////////////////////////
77 //////
78 ///////////////////////////////////////////////////////////////////
79 void Comsond()
80 {
81 1 g_cReceBuf[0]=1; //contact
82 1 g_cReceBuf[1]=0;
83 1 AnswerOk();
84 1 sond = 0;
85 1 DelayMs(200);
86 1 DelayMs(200);
87 1
88 1 sond = 1;
89 1
90 1 }
91
92
93 /////////////////////////////////////////////////////////////////////
94 //系统初始化
95 /////////////////////////////////////////////////////////////////////
96 void InitializeSystem()
97 {
98 1 TMOD &= 0x0F; //
99 1 TMOD |= 0x21; //定时器0为方式0,定时器1为方式2.软件启动定时器
100 1 PCON |= 0x80; //SMOD=1;串行口用于方式1、2、3时波特率加倍
101 1 SCON = 0x50; //10位异步收发(方式1),波特率可变,REN = 1(可以接收)
102 1 TH1 = TL1 = BOUND9600; //波特率9.6k
103 1 TR1=1; //启动定时器1
104 1 P0 = P1 = P2 = P3 = 0xFF;//IO端口初始化
105 1 IE |= 0x90; //EA=1,ES=1;CPU中断允许,串行口中断允许
106 1 }
107
108 /////////////////////////////////////////////////////////////////////
109 //初始化RC500
110 /////////////////////////////////////////////////////////////////////
111 void Rc500Ready()
112 {
113 1 char status;
114 1 DelayMs(100);
115 1 DelayMs(100);
116 1 DelayMs(100);
117 1 DelayMs(100);
C51 COMPILER V7.06 MAIN 05/01/2009 01:52:10 PAGE 3
118 1 DelayMs(100);
119 1 DelayMs(100);
120 1 DelayMs(100);
121 1
122 1 status = PcdReset();
123 1 if(status != MI_OK)
124 1 {
125 2 DelayMs(10);
126 2 status = PcdReset();//假如复位不成功,连续三次复位
127 2 }
128 1 if(status != MI_OK)
129 1 {
130 2 DelayMs(10);
131 2 status = PcdReset();
132 2 }
133 1 if(status == MI_OK)
134 1 {
135 2 g_bRc500Ok = 1;
136 2 sond = 1; //蜂鸣器响一声,表示RC500复位成功
137 2 DelayMs(200);
138 2 DelayMs(200);
139 2 sond = 0;
140 2 }
141 1 }
142
143 /////////////////////////////////////////////////////////////////////
144 //响应上位机发送的设置波特率命令
145 /////////////////////////////////////////////////////////////////////
146 void ComSetBound()
147 {
148 1 unsigned char bound = g_cReceBuf[1];
149 1
150 1 TR1 = 0;
151 1 switch(bound)
152 1 {
153 2 case 0:
154 2 TH1=TL1=BOUND4800;
155 2 break;
156 2 case 1:
157 2 TH1=TL1=BOUND9600;
158 2 break;
159 2 case 2:
160 2 TH1=TL1=BOUND14400;
161 2 break;
162 2 case 3:
163 2 TH1=TL1=BOUND19200;
164 2 break;
165 2 case 4:
166 2 TH1=TL1=BOUND28800;
167 2 break;
168 2 case 5:
169 2 TH1=TL1=BOUND38400;
170 2 break;
171 2 case 6:
172 2 TH1=TL1=BOUND57600;
173 2 break;
174 2 case 7:
175 2 TH1=TL1=BOUND115200;
176 2 break;
177 2 default:
178 2 break;
179 2 }
C51 COMPILER V7.06 MAIN 05/01/2009 01:52:10 PAGE 4
180 1 g_cReceBuf[0]=1; //contact
181 1 g_cReceBuf[1]=0;
182 1 AnswerOk();
183 1 DelayMs(20);
184 1 TR1 = 1;
185 1 }
186
187 /////////////////////////////////////////////////////////////////////
188 //响应上位机发送的寻A卡命令
189 /////////////////////////////////////////////////////////////////////
190 void ComRequestA()
191 {
192 1 char status;
193 1 status = PcdRequest(g_cReceBuf[1], &g_cReceBuf[2]);
194 1 if (status != MI_OK)
195 1 { status = PcdRequest(g_cReceBuf[1], &g_cReceBuf[2]); }
196 1 if (status != MI_OK)
197 1 {
198 2 g_cReceBuf[0]=1;
199 2 g_cReceBuf[1]=status;
200 2 AnswerOk();
201 2 return;
202 2 }
203 1
204 1 if(g_cReceBuf[2]==2)
205 1 g_cCidNad=mifarepro; // Mifare Pro 卡
206 1 else if(g_cReceBuf[2]==4)
207 1 g_cCidNad=mifare1; // Mifare One 卡
208 1 else if(g_cReceBuf[2]==16)
209 1 g_cCidNad=mifarelight; // Mifare Light 卡
210 1 else g_cCidNad=unknowncard;
211 1
212 1 g_cReceBuf[0]=3;
213 1 g_cReceBuf[1]=status;
214 1
215 1
216 1 AnswerOk();
217 1
218 1
219 1 }
220
221 /////////////////////////////////////////////////////////////////////
222 //响应上位机发送的A卡防冲撞命令
223 /////////////////////////////////////////////////////////////////////
224 void ComAnticoll()
225 {
226 1 char status;
227 1 status=PcdAnticoll(&g_cSNR);
228 1 if (status!=MI_OK )
229 1 {
230 2 g_cReceBuf[0]=1;
231 2 g_cReceBuf[1]=status;
232 2 AnswerOk();
233 2 return;
234 2 }
235 1 g_cReceBuf[2]=g_cSNR[0];
236 1 g_cReceBuf[3]=g_cSNR[1];
237 1 g_cReceBuf[4]=g_cSNR[2];
238 1 g_cReceBuf[5]=g_cSNR[3];
239 1 //memcpy(g_cReceBuf[2],&g_cSNR,4);
240 1 g_cReceBuf[0]=5;
241 1 g_cReceBuf[1]=status;
C51 COMPILER V7.06 MAIN 05/01/2009 01:52:10 PAGE 5
242 1 AnswerOk();
243 1 }
244
245 /////////////////////////////////////////////////////////////////////
246 //响应上位机发送的A卡锁定命令
247 /////////////////////////////////////////////////////////////////////
248 void ComSelect()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -