📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 1
C51 COMPILER V8.05a, 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
line level source
1 #include "reg52.h"
2 #include <string.h>
3 #include <intrins.h>
4 #include "main.h"
5 #include "slrc632.h"
6 #include "iso14443a.h"
7
8
9 #include <absacc.h>
10 //硬件版本号
11 unsigned char code hardmodel[12] = {"SL601F-0512"};
12
13 bit g_bReceOk; //正确接收到上位机指令标志
14 bit g_bReceAA; //接收到上位机发送的AA字节标志
15 bit g_bRc632Ok; //RC632复位正常标志
16 bit g_bIblock;
17
18 unsigned int g_cReceNum; //接收到上位机的字节数
19 unsigned int data g_cCommand; //接收到的命令码
20 unsigned char data g_cSNR[4]; //M1卡序列号
21 unsigned char g_cIcdevH; //设备标记
22 unsigned char g_cIcdevL; //设备标记
23 unsigned char g_cFWI; //
24 unsigned char g_cCidNad; //
25 unsigned char idata g_cReceBuf[64]; //和上位机通讯时的缓冲区
26
27 struct TranSciveBuffer{unsigned char MfCommand;
28 unsigned int MfLength;
29 unsigned char MfData[64];
30 };
31 void main( )
32 {
33 1
34 1 InitializeSystem( );
35 1 Rc632Ready( );
36 1 PcdConfigISOType( 'A' );
37 1 while ( 1 )
38 1 {
39 2 if (g_bReceOk)
40 2 {
41 3
42 3 g_bReceOk = 0;
43 3 switch(g_cCommand)
44 3 {
45 4 case 0x0101:
46 4 ComSetBound(); break;
47 4 case 0x0104:
48 4 ComGetHardModel(); break;
49 4 case 0x0108:
50 4 ComM632PcdConfigISOType(); break;
51 4 case 0x010C:
52 4 ComPcdAntenna(); break;
53 4
54 4 case 0x0201:
55 4 ComRequestA(); break;
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 2
56 4 case 0x0202:
57 4 ComAnticoll(); break;
58 4 case 0x0203:
59 4 ComSelect(); break;
60 4 case 0x0204:
61 4 ComHlta(); break;
62 4 case 0x0207:
63 4 ComAuthentication(); break;
64 4 case 0x0208:
65 4 ComM1Read(); break;
66 4 case 0x0209:
67 4 ComM1Write(); break;
68 4 case 0x020A:
69 4 ComM1Initval(); break;
70 4 case 0x020B:
71 4 ComM1Readval(); break;
72 4 case 0x020C:
73 4 ComM1Decrement(); break;
74 4 case 0x020D:
75 4 ComM1Increment(); break;
76 4 case 0x020E:
77 4 ComM1Restore(); break;
78 4 case 0x020F:
79 4 ComM1Transfer(); break;
80 4 case 0x0210:
81 4 ComTypeARst(); break;
82 4 case 0x0211:
83 4 ComTypeACOS(); break;
84 4
85 4 case 0x0303:
86 4 ComCL_Deselect(); break;
87 4
88 4 default:
89 4 AnswerErr( FAULT11 ); break;
90 4 }
91 3 ES = 1;
92 3 }
93 2 }
94 1 }
95
96
97
98 /////////////////////////////////////////////////////////////////////
99 //系统初始化
100 /////////////////////////////////////////////////////////////////////
101 void InitializeSystem()
102 {
103 1 TMOD &= 0x0F;
104 1 TMOD |= 0x21;
105 1 PCON |= 0x80;
106 1 SCON = 0x50;
107 1 TH1 = TL1 = BOUND19200;
108 1 TR1=1;
109 1 P0 = P1 = P2 = P3 = 0xFF;
110 1 IE |= 0x90;
111 1 }
112
113 /////////////////////////////////////////////////////////////////////
114 //初始化RC632
115 /////////////////////////////////////////////////////////////////////
116 void Rc632Ready()
117 {
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 3
118 1 char status;
119 1 DelayMs(100);
120 1 DelayMs(100);
121 1 DelayMs(100);
122 1
123 1
124 1
125 1 status = PcdReset();
126 1 if(status != MI_OK)
127 1 {
128 2 DelayMs(10);
129 2 status = PcdReset();
130 2 }
131 1 if(status != MI_OK)
132 1 {
133 2 DelayMs(10);
134 2 status = PcdReset();
135 2 }
136 1 if(status == MI_OK)
137 1 {
138 2 g_bRc632Ok = 1;
139 2 sond = 1; //蜂鸣器响一声,表示RC632复位成功
140 2 DelayMs(250);
141 2 sond = 0;
142 2 }
143 1 }
144
145 /////////////////////////////////////////////////////////////////////
146 //响应上位机发送的设置波特率命令
147 /////////////////////////////////////////////////////////////////////
148 void ComSetBound()
149 {
150 1 unsigned char bound = g_cReceBuf[6];
151 1 if (bound > 7)
152 1 { AnswerErr(FAULT12); }
153 1 else
154 1 {
155 2 AnswerCommandOk();
156 2 TR1 = 0;
157 2 switch(bound)
158 2 {
159 3 case 0:
160 3 TH1=TL1=BOUND4800;
161 3 break;
162 3 case 1:
163 3 TH1=TL1=BOUND9600;
164 3 break;
165 3 case 2:
166 3 TH1=TL1=BOUND14400;
167 3 break;
168 3 case 3:
169 3 TH1=TL1=BOUND19200;
170 3 break;
171 3 case 4:
172 3 TH1=TL1=BOUND28800;
173 3 break;
174 3 case 5:
175 3 TH1=TL1=BOUND38400;
176 3 break;
177 3 case 6:
178 3 TH1=TL1=BOUND57600;
179 3 break;
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 4
180 3 case 7:
181 3 TH1=TL1=BOUND115200;
182 3 break;
183 3 default:
184 3 break;
185 3 }
186 2 TR1 = 1;
187 2 }
188 1 }
189
190
191 /////////////////////////////////////////////////////////////////////
192 //响应上位机发送的读取硬件版本号命令
193 /////////////////////////////////////////////////////////////////////
194 void ComGetHardModel()
195 {
196 1 memcpy(&g_cReceBuf[0], &hardmodel[0], sizeof(hardmodel));
197 1 AnswerOk(&g_cReceBuf[0], sizeof(hardmodel));
198 1 }
199
200
201 /////////////////////////////////////////////////////////////////////
202 //响应上位机发送的设置RC632协议命令,ISO14443A/B或ISO15693
203 /////////////////////////////////////////////////////////////////////
204 void ComM632PcdConfigISOType()
205 {
206 1 if (MI_OK == PcdConfigISOType(g_cReceBuf[6]))
207 1 { AnswerCommandOk(); }
208 1 else
209 1 { AnswerErr(-1); }
210 1 }
211
212 /////////////////////////////////////////////////////////////////////
213 //响应上位机发送的天线命令
214 /////////////////////////////////////////////////////////////////////
215 void ComPcdAntenna()
216 {
217 1 char status;
218 1 if (!g_cReceBuf[6])
219 1 { status = PcdAntennaOff(); }
220 1 else
221 1 {
222 2 DelayMs(10);
223 2 status = PcdAntennaOn();
224 2 DelayMs(10);
225 2 }
226 1 if (status == MI_OK)
227 1 { AnswerCommandOk(); }
228 1 else
229 1 { AnswerErr(FAULT10); }
230 1 }
231
232 /////////////////////////////////////////////////////////////////////
233 //响应上位机发送的寻A卡命令
234 /////////////////////////////////////////////////////////////////////
235 void ComRequestA()
236 {
237 1 unsigned char atq[2];
238 1 char status;
239 1 status = PcdRequest(g_cReceBuf[6], atq);
240 1 if (status != MI_OK)
241 1 { status = PcdRequest(g_cReceBuf[6], atq); }
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 5
242 1 if (status == MI_OK)
243 1 { AnswerOk(atq,2); }
244 1 else
245 1 { AnswerErr(FAULT20); }
246 1 }
247
248 /////////////////////////////////////////////////////////////////////
249 //响应上位机发送的A卡防冲撞命令
250 /////////////////////////////////////////////////////////////////////
251 void ComAnticoll()
252 {
253 1 if (MI_OK == PcdAnticoll(&g_cSNR))
254 1 { AnswerOk(&g_cSNR,4); }
255 1 else
256 1 { AnswerErr(FAULT10); }
257 1 }
258
259 /////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -