📄 read2401a.lst
字号:
235 1 uchar BitCnt;
236 1 retc = 0;
237 1 SDA = 1;
238 1 for(BitCnt=0;BitCnt<8;BitCnt++)
239 1 {
240 2 _nop_();
241 2 SCL = 0; //置时钟线为低,准备接收
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 5
242 2 _nop_();
243 2 _nop_();
244 2 _nop_();
245 2 _nop_();
246 2 _nop_();
247 2 SCL = 1; //置时钟线为高使得数据有效
248 2 _nop_();
249 2 _nop_();
250 2 retc = retc << 1; //左移补零
251 2 if (SDA == 1)
252 2 retc = retc + 1; //当数据为真加一
253 2 _nop_();
254 2 _nop_();
255 2 }
256 1 SCL = 0;
257 1 _nop_();
258 1 _nop_();
259 1 return(retc);
260 1 }
261
262 void init()
263 {
264 1 TMOD=0x20;
265 1 TL1=0xFd;
266 1 TH1=0xFd;
267 1 SCON=0x50;
268 1 PCON=0x00;
269 1 EA = 1;
270 1 ES = 1;
271 1 TR1=1;
272 1 Card_Read_LED = OFF;
273 1 Card_Write_LED = OFF;
274 1 Card_Insert_LED = OFF;
275 1 Card_Power_LED = OFF;
276 1 RST = OFF;
277 1 Card_In = 1;
278 1 Card_Insert_Flag = False;
279 1 Card_Power_Control = False;
280 1 Card_Write_Flag = False;
281 1 Card_Power_Flag = False;
282 1 R_Counter = 0;
283 1 }
284
285 void R_Serial() interrupt 4 using 1
286 {
287 1 if( RI == 1)
288 1 {
289 2 uchar R_Temp;
290 2 RI = 0;
291 2 R_Temp = SBUF;
292 2 if(R_Counter==0)
293 2 {
294 3 if( R_Temp== 0xFF)
295 3 {
296 4 R_Counter=0;
297 4 }
298 3 else return;
299 3 }
300 2 else
301 2 {
302 3 R_Buffer[R_Counter -1] = R_Temp;
303 3 if( R_Counter == 4)
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 6
304 3 {
305 4 R_Counter=0;
306 4 Deal_R_Buffer();
307 4 return;
308 4 }
309 3 }
310 2 R_Counter++;
311 2 }
312 1 }
313
314 void Write_Send()
315 {
316 1 SBUF =0xFF;
317 1 do{}
318 1 while(TI == 0);
319 1 TI = 0;
320 1 SBUF = 0x00;
321 1 do{}
322 1 while(TI == 0);
323 1 TI = 0;
324 1 SBUF = Write_Add;
325 1 do{}
326 1 while(TI == 0);
327 1 TI = 0;
328 1 SBUF = Write_Data;
329 1 do{}
330 1 while(TI == 0);
331 1 TI = 0;
332 1 }
333
334 void Read_Send()
335 {
336 1 SBUF =0xFF;
337 1 do{}
338 1 while(TI == 0);
339 1 TI = 0;
340 1 SBUF = 0xFF;
341 1 do{}
342 1 while(TI == 0);
343 1 TI = 0;
344 1 SBUF = Read_Add;
345 1 do{}
346 1 while(TI == 0);
347 1 TI = 0;
348 1 SBUF = Read_Data;
349 1 do{}
350 1 while(TI == 0);
351 1 TI = 0;
352 1 }
353 void Error_Send()
354 {
355 1 SBUF =0xFF;
356 1 do{}
357 1 while(TI == 0);
358 1 TI = 0;
359 1 SBUF = 0xFF;
360 1 do{}
361 1 while(TI == 0);
362 1 TI = 0;
363 1 SBUF = 0xFF;
364 1 do{}
365 1 while(TI == 0);
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 7
366 1 TI = 0;
367 1 SBUF = 0xFF;
368 1 do{}
369 1 while(TI == 0);
370 1 TI = 0;
371 1 }
372
373 void Deal_R_Buffer()
374 {
375 1 switch(R_Buffer[0])
376 1 {
377 2 case 0x55:
378 2 {
379 3 switch(R_Buffer[1])
380 3 {
381 4 case 0xff:
382 4 {
383 5 Card_Read_Flag = True;
384 5 Read_Add = R_Buffer[2];
385 5 }
386 4 break;
387 4 case 0x00:
388 4 {
389 5 Card_Write_Flag = True;
390 5 Write_Add = R_Buffer[2];
391 5 Write_Data = R_Buffer[3];
392 5 }
393 4 break;
394 4 default: Error_Send();
395 4 }
396 3 }
397 2 break;
398 2 case 0xaa:
399 2 switch(R_Buffer[1])
400 2 {
401 3 case 0xff: Card_Power_Flag = True; break;
402 3 case 0x00: Card_Power_Flag = False; break;
403 3 default: Error_Send();
404 3 }
405 2 break;
406 2 default: Error_Send();
407 2 }
408 1 }
409
410 void Write_Card()
411 {
412 1 Open_At24c01A();
413 1 NOP();
414 1 Start_I2C();
415 1 SendByte(Write_At24c01A);
416 1 if(ack == 1)
417 1 {
418 2 SendByte(Write_Add);
419 2 if(ack == 1)
420 2 {
421 3 SendByte(Write_Data);
422 3 if(ack == 1)
423 3 {
424 4 Write_Send();
425 4 Card_Write_Flag = False;
426 4 Stop_I2C();
427 4 NOP();
C51 COMPILER V6.23a READ2401A 08/22/2003 17:48:00 PAGE 8
428 4 Close_At24c01A();
429 4 }
430 3 }
431 2 }
432 1
433 1 }
434
435 void Read_Card()
436 {
437 1 Open_At24c01A();
438 1 NOP();
439 1 Start_I2C();
440 1 SendByte(Write_At24c01A);
441 1 if(ack == 1)
442 1 {
443 2 SendByte(Read_Add);
444 2 if(ack == 1)
445 2 {
446 3 Start_I2C();
447 3 SendByte(Read_At24c01A);
448 3 if(ack == 1)
449 3 {
450 4 Read_Data = RevByte();
451 4 Read_Send();
452 4 Card_Read_Flag = False;
453 4 Stop_I2C();
454 4 NOP();
455 4 Close_At24c01A();
456 4 }
457 3 }
458 2 }
459 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 667 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 1
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 + -