📄 emreader.lst
字号:
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE EMREADER
OBJECT MODULE PLACED IN EMReader.OBJ
COMPILER INVOKED BY: d:\Keil7\C51\BIN\C51.EXE EMReader.c ROM(SMALL) DEBUG OBJECTEXTEND
stmt level source
1 #include "common.h"
2
3 extern void SerialInit();
4 extern void SerialSend(BYTE SendCode);
5 extern BOOL SerialRece(BYTE *SBuf);
6 //extern void delay(unsigned int iDelay);
7 extern void delay_100us();
8 extern void delay_48us();
9 extern void delay_36us();
10
11 extern void TimerInit();
12 extern unsigned int GetTimerCount();
13
14 extern unsigned char rlc(unsigned char rc_Byte);
15
16 unsigned char GetOneBitNum(unsigned char buf,unsigned char from,unsigned char end);
17
18 sbit InPin = P3^7;
19 sbit ModePin = P1^7;
20
21 sbit Dat1 = P3^0;
22 sbit Dat2 = P3^1;
23
24 main()
25 {
26 1 BYTE row,col,buffer;
27 1 BYTE bitFlag[5];
28 1 BYTE bitCount[4];
29 1 BYTE ID[5];
30 1 BOOL bBuf;
31 1 BOOL bErrFlag = FALSE;
32 1 BOOL bHeaderFlag = FALSE;
33 1 BOOL bFirstBit,bEndBit;
34 1
35 1 SerialInit();
36 1 TimerInit();
37 1
38 1 EA = 1;
39 1
40 1 while(1)
41 1 {
42 2 //get the header
43 2 bErrFlag = FALSE;
44 2 if(bHeaderFlag == FALSE)
45 2 {
46 3 while(InPin == 0);
47 3 GetTimerCount();
48 3
49 3 TR0 = 1;
50 3 while(InPin == 1);
51 3 if(GetTimerCount() < 150) continue; //300us
52 3 }
53 2 while(InPin == 0); // header 1 end
54 2
55 2 if(GetTimerCount() > 150)
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 2
56 2 {
57 3 bHeaderFlag = FALSE;
58 3 continue;
59 3 }
60 2 while(InPin == 1);
61 2 if(GetTimerCount() > 150)
62 2 {
63 3 bHeaderFlag = TRUE;
64 3 continue; //300us
65 3 }
66 2 while(InPin == 0); // header 2 end
67 2
68 2 if(GetTimerCount() > 150)
69 2 {
70 3 bHeaderFlag = FALSE;
71 3 continue;
72 3 }
73 2 while(InPin == 1);
74 2 if(GetTimerCount() > 150)
75 2 {
76 3 bHeaderFlag = TRUE;
77 3 continue; //300us
78 3 }
79 2 while(InPin == 0); // header 3 end
80 2
81 2 if(GetTimerCount() > 150)
82 2 {
83 3 bHeaderFlag = FALSE;
84 3 continue;
85 3 }
86 2 while(InPin == 1);
87 2 if(GetTimerCount() > 150)
88 2 {
89 3 bHeaderFlag = TRUE;
90 3 continue; //300us
91 3 }
92 2 while(InPin == 0); // header 4 end
93 2
94 2 if(GetTimerCount() > 150)
95 2 {
96 3 bHeaderFlag = FALSE;
97 3 continue;
98 3 }
99 2 while(InPin == 1);
100 2 if(GetTimerCount() > 150)
101 2 {
102 3 bHeaderFlag = TRUE;
103 3 continue; //300us
104 3 }
105 2 while(InPin == 0); // header 5 end
106 2
107 2 if(GetTimerCount() > 150)
108 2 {
109 3 bHeaderFlag = FALSE;
110 3 continue;
111 3 }
112 2 while(InPin == 1);
113 2 if(GetTimerCount() > 150)
114 2 {
115 3 bHeaderFlag = TRUE;
116 3 continue; //300us
117 3 }
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 3
118 2 while(InPin == 0); // header 6 end
119 2
120 2 if(GetTimerCount() > 150)
121 2 {
122 3 bHeaderFlag = FALSE;
123 3 continue;
124 3 }
125 2 while(InPin == 1);
126 2 if(GetTimerCount() > 150)
127 2 {
128 3 bHeaderFlag = TRUE;
129 3 continue; //300us
130 3 }
131 2 while(InPin == 0); // header 7 end
132 2
133 2 if(GetTimerCount() > 150)
134 2 {
135 3 bHeaderFlag = FALSE;
136 3 continue;
137 3 }
138 2 while(InPin == 1);
139 2 if(GetTimerCount() > 150)
140 2 {
141 3 bHeaderFlag = TRUE;
142 3 continue; //300us
143 3 }
144 2 while(InPin == 0); // header 8 end
145 2
146 2 if(GetTimerCount() > 150)
147 2 {
148 3 bHeaderFlag = FALSE;
149 3 continue;
150 3 }
151 2 while(InPin == 1);
152 2 if(GetTimerCount() > 150)
153 2 {
154 3 bHeaderFlag = TRUE;
155 3 continue; //300us
156 3 }
157 2 // while(InPin == 0); // header 9 end
158 2 bHeaderFlag = FALSE;
159 2
160 2 TR0 = 0;
161 2 delay_100us();
162 2 delay_100us();
163 2
164 2 //data
165 2 bitCount[0] = 0;
166 2 bitCount[1] = 0;
167 2 bitCount[2] = 0;
168 2 bitCount[3] = 0;
169 2 for(row = 0; row < 11; row++)
170 2 {
171 3 buffer = 0;
172 3 for(col = 0; col < 5; col++)
173 3 {
174 4 delay_100us();
175 4 bBuf = InPin;
176 4 TL0 = 0;
177 4 TH0 = 0;
178 4 TR0 = 1;
179 4 while(bBuf == InPin); //100us
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 4
180 4 if(GetTimerCount() > 100)
181 4 {
182 5 bErrFlag = TRUE;
183 5 break;
184 5 }
185 4 if(col < 4) delay_100us();
186 4
187 4 if(bBuf)
188 4 {
189 5 buffer++;
190 5 bitFlag[col] = 1;
191 5 }
192 4 else bitFlag[col] = 0;
193 4 if(col < 4)
194 4 {
195 5 if(bitFlag[col]) bitCount[col]++;
196 5 }
197 4 else if((col == 4) && ((buffer%2) != 0))
198 4 {
199 5 if(row != 10) bErrFlag = TRUE;
200 5 break;
201 5 }
202 4 }//for col end
203 3
204 3 if(bErrFlag) break;
205 3 if(row == 10) break;
206 3 if((row%2) == 0)
207 3 {
208 4 if(bitFlag[0]) ID[row/2] |= 0x80;
209 4 else ID[row/2] &= 0x7f;
210 4 if(bitFlag[1]) ID[row/2] |= 0x40;
211 4 else ID[row/2] &= 0xbf;
212 4 if(bitFlag[2]) ID[row/2] |= 0x20;
213 4 else ID[row/2] &= 0xdf;
214 4 if(bitFlag[3]) ID[row/2] |= 0x10;
215 4 else ID[row/2] &= 0xef;
216 4 }
217 3 else
218 3 {
219 4 if(bitFlag[0]) ID[row/2] |= 0x08;
220 4 else ID[row/2] &= 0xf7;
221 4 if(bitFlag[1]) ID[row/2] |= 0x04;
222 4 else ID[row/2] &= 0xfb;
223 4 if(bitFlag[2]) ID[row/2] |= 0x02;
224 4 else ID[row/2] &= 0xfd;
225 4 if(bitFlag[3]) ID[row/2] |= 0x01;
226 4 else ID[row/2] &= 0xfe;
227 4 }
228 3
229 3 }//for row end
230 2 if(bErrFlag) continue;
231 2 if((bitCount[0]%2) != 0) continue;
232 2 if((bitCount[1]%2) != 0) continue;
233 2 if((bitCount[2]%2) != 0) continue;
234 2 if((bitCount[3]%2) != 0) continue;
235 2
236 2 // Get ID OK
237 2 if(ModePin)
238 2 {
239 3 buffer = GetOneBitNum(ID[2],0,7);
240 3 buffer += GetOneBitNum(ID[3],0,3);
241 3 if((buffer%2) == 0) bFirstBit = 0;
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 5
242 3 else bFirstBit = 1;
243 3 buffer = GetOneBitNum(ID[3],4,7);
244 3 buffer += GetOneBitNum(ID[4],0,7);
245 3 if((buffer%2) == 0) bEndBit = 1;
246 3 else bEndBit = 0;
247 3
248 3 if(bFirstBit)
249 3 {
250 4 Dat2 = 0;
251 4 delay_48us();
252 4 Dat2 = 1;
253 4 }
254 3 else
255 3 {
256 4 Dat1 = 0;
257 4 delay_48us();
258 4 Dat1 = 1;
259 4 _nop_();
260 4 _nop_();
261 4 }
262 3 delay_100us();
263 3 delay_100us();
264 3 delay_100us();
265 3 delay_100us();
266 3 delay_100us();
267 3 delay_100us();
268 3 delay_100us();
269 3 delay_100us();
270 3 delay_48us();
271 3 delay_36us();
272 3
273 3 for(row = 0; row < 3; row++)
274 3 {
275 4 buffer = ID[row+2];
276 4 for(col = 0; col <8; col++)
277 4 {
278 5 buffer = rlc(buffer);
279 5 if(CY)
280 5 {
281 6 Dat2 = 0;
282 6 delay_48us();
283 6 Dat2 = 1;
284 6 }
285 5 else
286 5 {
287 6 Dat1 = 0;
288 6 delay_48us();
289 6 Dat1 = 1;
290 6 _nop_();
291 6 _nop_();
292 6 }
293 5 delay_100us();
294 5 delay_100us();
295 5 delay_100us();
296 5 delay_100us();
297 5 delay_100us();
298 5 delay_100us();
299 5 delay_100us();
300 5 delay_100us();
301 5 delay_48us();
302 5 if(col == 7)
303 5 {
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 6
304 6 _nop_();
305 6 _nop_();
306 6 _nop_();
307 6 }
308 5 else delay_36us();
309 5 }
310 4 }
311 3
312 3 delay_36us();
313 3 if(bEndBit)
314 3 {
315 4 Dat2 = 0;
316 4 delay_48us();
317 4 Dat2 = 1;
318 4 }
319 3 else
320 3 {
321 4 Dat1 = 0;
322 4 delay_48us();
323 4 Dat1 = 1;
324 4 _nop_();
325 4 _nop_();
326 4 }
327 3 delay_100us();
328 3 delay_100us();
329 3 delay_100us();
330 3 delay_100us();
331 3 delay_100us();
332 3 delay_100us();
333 3 delay_100us();
334 3 delay_100us();
335 3 delay_100us();
336 3 }
337 2 else
338 2 {
339 3 SerialSend(ID[0]);
340 3 SerialSend(ID[1]);
341 3 SerialSend(ID[2]);
342 3 SerialSend(ID[3]);
343 3 SerialSend(ID[4]);
344 3 }
345 2 }
346 1 }
347
348 unsigned char GetOneBitNum(unsigned char buf,unsigned char from,unsigned char end)
349 {
350 1 unsigned char i;
351 1 unsigned char result = 0;
352 1 i = from;
353 1 while(i--)
354 1 {
355 2 buf = rlc(buf);
356 2 }
357 1 for(i = from; i < end+1; i++)
358 1 {
359 2 buf = rlc(buf);
360 2 if(CY) result++;
361 2 }
362 1 return result;
363 1 }
C51 COMPILER V7.00 EMREADER 01/23/2003 15:06:45 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1071 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 21
IDATA SIZE = ---- ----
BIT SIZE = ---- 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -