📄 m101(2)x_test.lst
字号:
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE M101_2_X_TEST
OBJECT MODULE PLACED IN M101(2)X_Test.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE M101(2)X_Test.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*******************************************************************************
2
3 I2C协议
4 模块I2C地址为0xA0
5 通讯速率为:400K。
6 发送数据格式:
7 模块地址+W/R 长度字 命令字 数据域 校验字
8 模块地址+W/R:
9 模块地址为:0xA0,写bit0为0,则写指令为:0xA0 + 0x0 = 0xA0
10 模块地址为:0xA0,读bit0为1,则读指令为:0xA0 + 0x1 = 0xA1
11 长度字:指明从长度字到数据域最后一字节的字节数。
12 命令字:本条命令的含义。
13 数据域:此项可以为空。
14 校验字:从长度字到数据域最后一字节的逐字节异或值(最后一字节)。
15 返回数据格式:
16 成功: 长度字 接收到的命令字+数据域 校验字
17 失败: 长度字 接收到的命令字取反 校验字
18 *******************************************************************************/
19
20 #include "main.h"
21
22 #define READ_M101XX 0xb1
23 #define WRITE_M101XX 0xb0
24
25
26 unsigned char g_cReceBuf[43]; //接收缓冲区
27 unsigned char g_cReceNum; //接收字节计数
28 bit g_bReceCommandOk; //接收命令正确标志
29 bit g_bCard; //卡片进入射频场标志
30
31
32 unsigned char ComSet[]
33 = {0x03,
34 COMM_CONTROL_ANTENNA,
35 0x11};
36 //设置打开天线和关闭自动循卡
37 unsigned char code ComSearchCard[]
38 = {0x03,
39 COMM_MIFARE_SEARCH_CARD,
40 0x00};
41 //循卡后读出卡号
42 unsigned char cReadBlock[13]
43 = {0x0A,
44 COMM_READ_BLOCK,
45 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
46 //读块No.4
47 unsigned char code ComReadBlock4[]
48 = {0x0A,
49 COMM_READ_BLOCK,
50 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
51 //读块No.6
52 unsigned char code ComReadBlock6[]
53 = {0x0A,
54 COMM_READ_BLOCK,
55 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 2
56 //写块No.4
57 unsigned char code ComWriteBlock4[]
58 = {0X1A,
59 COMM_WRITE_BLOCK,
60 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
61 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
62 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
63 //初始化钱包No.5 的值为0x12345678
64 unsigned char code ComIntiPurse5[]
65 = {0x0E,
66 COMM_INIT_PURSE,
67 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0x78, 0x56, 0x34, 0x12};
68 //读钱包的值No.6
69 unsigned char code ComReadPurse6[]
70 = {0x0A,
71 COMM_READ_PURSE,
72 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
73 //钱包值加2
74 unsigned char code ComIncrPurse5[]
75 = {0x0E,
76 COMM_INC_VALUE,
77 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00};
78 //钱包值减1
79 unsigned char code ComDecrPurse5[]
80 = {0x0E,
81 COMM_DEC_VALUE,
82 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00};
83 // restore purse in block No.5 to block No.6
84 unsigned char code ComBakPurse56[]
85 = {0x0B,
86 COMM_BAK_PURSE,
87 0x00, 0x05, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
88 // 卡片休眠
89 unsigned char code ComHaltCard[]
90 = {0x02,
91 COMM_CARD_HALT,
92 };
93 unsigned char code ComHaltMCU[]
94 = {0x02,
95 COMM_SET_MCU_IDLE,
96 };
97 // 钱包在 INC & DEC 后的结果
98 unsigned char code pursevalue[]
99 = {0x79,0x56,0x34, 0x12};
100 unsigned char code ComClrPA[]
101 = {0X03 ,
102 COMM_PA_OUT_CLR ,
103 0XFF};
104 unsigned char code ComSetPA[]
105 = {0X03 ,
106 COMM_PA_OUT_SET ,
107 0XFF};
108 unsigned char code ComClrPB[]
109 = {0X03 ,
110 COMM_PB_OUT_CLR ,
111 0X1F};
112 unsigned char code ComSetPB[]
113 = {0X03 ,
114 COMM_PB_OUT_SET ,
115 0X1F};
116
117
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 3
118
119 void Delay100uS(unsigned int i)
120 {
121 1 unsigned char m;
122 1 while(i--)
123 1 {
124 2 for(m = 0; m < 13; m++)
125 2 {
126 3 LED_zhishi = CARDPIN;
127 3 }
128 2 }
129 1 }
130 void main()
131 {
132 1 unsigned char i;
133 1 unsigned char cStatus;
134 1 InitializeSystem();
135 1 i=16;
136 1 BEEP = 0;
137 1 P0 = 0XFF;
138 1 P1 = 0XFF;
139 1 P2 = 0XFF;
140 1 P3 = 0XFF;
141 1 while(i--)
142 1 {
143 2 LED_ok = ~LED_ok;
144 2 LED_UART = ~LED_UART;
145 2 LED_error = ~LED_error;
146 2 LED_zhishi = ~LED_zhishi;
147 2 Delay100uS(500);
148 2 }
149 1 while (1)
150 1 {
151 2 g_bCard = !CARDPIN;
152 2 LED_zhishi = CARDPIN;
153 2 ES = 0;
154 2 cStatus = IicTesting(); // do IIC testing by AutoSearchCard
155 2 if (SUCCESS != cStatus) // if did not success, alarm error and show error code
156 2 {
157 3 Err(); //测试失败
158 3 g_bCard = !CARDPIN;
159 3 LED_zhishi = CARDPIN;
160 3 ShowError(cStatus);
161 3 continue;
162 3 }
163 2 LED_ok = 0; //测试成功
164 2 Delay100uS(500);
165 2 LED_ok = 1;
166 2 g_bCard = !CARDPIN;
167 2 LED_zhishi = CARDPIN;
168 2 i++;
169 2 }
170 1 }
171 unsigned char IicTesting(void)
172 {
173 1
174 1 unsigned char cReadBlock[10]={0x0a, 0x21, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
175 1 unsigned char *cPa, *cPb;
176 1 unsigned char i;
177 1 unsigned char cStatus;
178 1
179 1 Send_IIC_Command(ComSet);
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 4
180 1 cStatus = Read_Iic_Data(g_cReceBuf);
181 1 if ((g_cReceBuf[1] != ComSet[1]) || cStatus != SUCCESS)
182 1 {
183 2 return 1;
184 2 }
185 1 //寻卡
186 1 cPa = ComSearchCard;
187 1 Send_IIC_Command(cPa);
188 1 cStatus = Read_Iic_Data(g_cReceBuf);
189 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
190 1 {
191 2 return 2;
192 2 }
193 1 cPa = ComSearchCard;
194 1 Send_IIC_Command(cPa);
195 1 cStatus = Read_Iic_Data(g_cReceBuf);
196 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
197 1 {
198 2 return 2;
199 2 }
200 1
201 1 //依次读出s50卡片中的16个扇区,64块的数据
202 1 for(i=0; i<64 ;i++)
203 1 {
204 2 cReadBlock[3] = i;
205 2 cPa = cReadBlock;
206 2 Send_IIC_Command(cPa);
207 2 cStatus = Read_Iic_Data(g_cReceBuf);
208 2 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
209 2 {
210 3 return 3;
211 3 }
212 2 Delay100uS(50);
213 2 }
214 1
215 1 //写块No.4
216 1 cPa = ComWriteBlock4;
217 1 Send_IIC_Command(cPa);
218 1 cStatus = Read_Iic_Data(g_cReceBuf);
219 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
220 1 {
221 2 return 4;
222 2 }
223 1
224 1 //读块No.4
225 1 cPa = ComReadBlock4;
226 1 Send_IIC_Command(cPa);
227 1 cStatus = Read_Iic_Data(g_cReceBuf);
228 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
229 1 {
230 2 return 5;
231 2 }
232 1 //比较数据
233 1 cPa = &ComWriteBlock4[10];
234 1 cPb = &g_cReceBuf[2];
235 1 if (memcmp(cPa, cPb, 16) != 0)
236 1 {
237 2 return 6;
238 2 }
239 1 //初始化No.5 作为钱包初值为0x12345678
240 1 cPa = ComIntiPurse5;
241 1 Send_IIC_Command(cPa);
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 5
242 1 cStatus = Read_Iic_Data(g_cReceBuf);
243 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
244 1 {
245 2 return 7;
246 2 }
247 1
248 1 //增值No.5 = "2"
249 1 cPa = ComIncrPurse5;
250 1 Send_IIC_Command(cPa);
251 1 cStatus = Read_Iic_Data(g_cReceBuf);
252 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
253 1 {
254 2 return 8;
255 2 }
256 1
257 1 //减值 "1"
258 1 cPa = ComDecrPurse5;
259 1 Send_IIC_Command(cPa);
260 1 cStatus = Read_Iic_Data(g_cReceBuf);
261 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
262 1 {
263 2 return 9;
264 2 }
265 1
266 1 //restore the purse in block No.5 to block No.6
267 1 cPa = ComBakPurse56;
268 1 Send_IIC_Command(cPa);
269 1 cStatus = Read_Iic_Data(g_cReceBuf);
270 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
271 1 {
272 2 return 10;
273 2 }
274 1
275 1 //读最后的值No.6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -