📄 m101(2)x_test.lst
字号:
C51 COMPILER V7.07 M101_2_X_TEST 06/18/2007 15:10:20 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 UART接口一帧的数据格式为 1个起始位,8个数据位,1个地址/数据标志位,1个停止位。
4 波特率:19200,方式3,11位格式。
5 发送数据封包格式:(注:模块地址为地址帧第9位数据为1,其他的为数据帧第9位数据为0)
6 数据包内容:模块地址(2B) 长度字(1B) 命令字(1B) 数据域(nB) 校验字(1B)
7 模块地址:对于单独使用的模块来说固定为0x00;
8 对网络版模块来说为0x01~0XFE;
9 0xFF为广播(不回答)。
10 注:模块地址为完全相同的2字节.
11 长度字:指明从长度字到数据域最后一字节的字节数(包括长度字)
12 命令字:本条命令的含义
13 数据域:该条命令的内容,此项可以为空
14 校验字:从长度字到数据域最后一字节的逐字节异或值(最后一字节)。
15 返回数据封包格式:(注:所有字节的第9位数据为0)
16 数据包内容:命令头 长度字 命令字 执行结果 数据域 校验字
17 命令头: 0xAA 0x55,若后续数据中包含0xAA则随后补充一字节0x00以区分命令头但长度字不增加
18 长度字: 指明从长度字到数据域最后一字节的字节数
19 命令字: 执行正确为接收到的命令字;
20 执行错误为接收到的命令字逐位取反;
21 数据域: 该条命令返回的内容
22 校验字:从长度字到数据域最后一字节的逐字节异或值(最后一字节)。
23 *******************************************************************************/
24
25
26 #include "main.h"
27
28
29 unsigned char g_cReceBuf[43]; //接收缓冲区
30 unsigned char g_cReceNum; //接收字节计数
31 bit g_bReceCommandOk; //接收命令正确标志
32 bit g_bReceAA; //接收的数为 "0xaa", 记下标志
33 bit g_bCard; //卡片进入射频场标志
34 unsigned char code ComHaltMCU[]
35 = {0x02,
36 COMM_SET_MCU_IDLE,
37 };
38 unsigned char ComSet[]
39 = {0x03,
40 COMM_CONTROL_ANTENNA,
41 0x01};
42 //设置打开天线和关闭自动循卡
43 unsigned char code ComSearchCard[]
44 = {0x03,
45 COMM_MIFARE_SEARCH_CARD,
46 0x00};
47 //循卡后读出卡号
48 unsigned char cReadBlock[13]
49 = {0x0A,
50 COMM_READ_BLOCK,
51 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
52 //读块No.4
53 unsigned char code ComReadBlock4[]
54 = {0x0A,
55 COMM_READ_BLOCK,
C51 COMPILER V7.07 M101_2_X_TEST 06/18/2007 15:10:20 PAGE 2
56 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
57 //读块No.6
58 unsigned char code ComReadBlock6[]
59 = {0x0A,
60 COMM_READ_BLOCK,
61 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
62 //写块No.4
63 unsigned char code ComWriteBlock4[]
64 = {0X1A,
65 COMM_WRITE_BLOCK,
66 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
67 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
68 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
69 //初始化钱包No.5 的值为0x12345678
70 unsigned char code ComIntiPurse5[]
71 = {0x0E,
72 COMM_INIT_PURSE,
73 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0x78, 0x56, 0x34, 0x12};
74 //读钱包的值No.6
75 unsigned char code ComReadPurse6[]
76 = {0x0A,
77 COMM_READ_PURSE,
78 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
79 //钱包值加2
80 unsigned char code ComIncrPurse5[]
81 = {0x0E,
82 COMM_INC_VALUE,
83 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00};
84 //钱包值减1
85 unsigned char code ComDecrPurse5[]
86 = {0x0E,
87 COMM_DEC_VALUE,
88 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00};
89 // restore purse in block No.5 to block No.6
90 unsigned char code ComBakPurse56[]
91 = {0x0B,
92 COMM_BAK_PURSE,
93 0x00, 0x05, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
94 // 卡片休眠
95 unsigned char code ComHaltCard[]
96 = {0x02,
97 COMM_CARD_HALT,
98 };
99 // 钱包在 INC & DEC 后的结果
100 unsigned char code pursevalue[]
101 = {0x79,0x56,0x34, 0x12};
102 unsigned char code ComClrPA[]
103 = {0X03 ,
104 COMM_PA_OUT_CLR ,
105 0XFF};
106 unsigned char code ComSetPA[]
107 = {0X03 ,
108 COMM_PA_OUT_SET ,
109 0XFF};
110 unsigned char code ComClrPB[]
111 = {0X03 ,
112 COMM_PB_OUT_CLR ,
113 0X1F};
114 unsigned char code ComSetPB[]
115 = {0X03 ,
116 COMM_PB_OUT_SET ,
117 0X1F};
C51 COMPILER V7.07 M101_2_X_TEST 06/18/2007 15:10:20 PAGE 3
118
119
120
121 void Delay100uS(unsigned int i)
122 {
123 1 unsigned char m;
124 1 while(i--)
125 1 {
126 2 for(m = 0; m < 13; m++)
127 2 {
128 3 LED_zhishi = CARDPIN;
129 3 }
130 2 }
131 1 }
132 void main()
133 {
134 1 unsigned char i;
135 1 unsigned char cStatus;
136 1 InitializeSystem();
137 1 i=16;
138 1 BEEP = 0;
139 1 P0 = 0XFF;
140 1 P1 = 0XFF;
141 1 P2 = 0XFF;
142 1 P3 = 0XFF;
143 1 while(i--)
144 1 {
145 2 LED_ok = ~LED_ok;
146 2 LED_UART = ~LED_UART;
147 2 LED_error = ~LED_error;
148 2 LED_zhishi = ~LED_zhishi;
149 2 Delay100uS(500);
150 2 }
151 1 while (1)
152 1 {
153 2 ES = 1;
154 2 SM2 = 0;
155 2 cStatus = UartTesting();
156 2 if (SUCCESS != cStatus)
157 2 {
158 3 Err(); //测试失败
159 3 g_bCard = !CARDPIN;
160 3 LED_zhishi = CARDPIN;
161 3 ShowError(cStatus);
162 3 continue;
163 3 }
164 2 LED_ok = 0; //测试成功
165 2 Delay100uS(500);
166 2 LED_ok = 1;
167 2 g_bCard = !CARDPIN;
168 2 LED_zhishi = CARDPIN;
169 2 i++;
170 2 }
171 1 }
172
173 unsigned char UartTesting()
174 {
175 1 unsigned char cReadBlock[10] = {0x0a, 0x21, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
176 1 unsigned char *cPa, *cPb;
177 1 unsigned char i;
178 1 unsigned char cCnt;
179 1 cPa = ComSet;
C51 COMPILER V7.07 M101_2_X_TEST 06/18/2007 15:10:20 PAGE 4
180 1 SendUart(cPa);
181 1 for (cCnt=200; (cCnt > 0) && !g_bReceCommandOk; cCnt--)
182 1 {
183 2 Delay100uS(1);
184 2 }
185 1 if ((g_cReceBuf[1] != cPa[1]) || (0 == cCnt))
186 1 {
187 2 return 1;
188 2 }
189 1 cPa = ComSearchCard;
190 1 SendUart(cPa);
191 1 for (cCnt=200; (cCnt > 0) && !g_bReceCommandOk; cCnt--)
192 1 {
193 2 Delay100uS(1);
194 2 }
195 1 if ((g_cReceBuf[1] != cPa[1]) || (0 == cCnt))
196 1 {
197 2 return 2;
198 2 }
199 1
200 1 //依次读出s50卡片中的16个扇区,64块的数据
201 1 for(i=0; i<64 ;i++)
202 1 {
203 2 cReadBlock[3] = i;
204 2 cPa = cReadBlock;
205 2 SendUart(cPa);
206 2 for (cCnt=200; (cCnt > 0) && !g_bReceCommandOk; cCnt--)
207 2 {
208 3 Delay100uS(3);
209 3 }
210 2 if ((g_cReceBuf[1] != cPa[1]) || (0 == cCnt))
211 2 {
212 3 return 3;
213 3 }
214 2 Delay100uS(50);
215 2 }
216 1 //写块
217 1 cPa = ComWriteBlock4;
218 1 SendUart(cPa);
219 1 for (cCnt=200; (cCnt > 0) && !g_bReceCommandOk; cCnt--)
220 1 {
221 2 Delay100uS(1);
222 2 }
223 1 if ((g_cReceBuf[1] != cPa[1]) || (0 == cCnt))
224 1 {
225 2 return 4;
226 2 }
227 1 //读块
228 1 cPa = ComReadBlock4;
229 1 SendUart(cPa);
230 1 for (cCnt=200; (cCnt > 0) && !g_bReceCommandOk; cCnt--)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -