📄 m101(2)x_test.lst
字号:
276 1 cPa = ComReadPurse6;
277 1 Send_IIC_Command(cPa);
278 1 cStatus = Read_Iic_Data(g_cReceBuf);
279 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
280 1 {
281 2 return 11;
282 2 }
283 1 cPa = pursevalue;
284 1 cPb = &g_cReceBuf[2];
285 1 if (memcmp(cPa, cPb, 4) != 0)
286 1 {
287 2 return 12;
288 2 }
289 1
290 1 cPa = ComHaltMCU;
291 1 Send_IIC_Command(cPa);
292 1 cStatus = Read_Iic_Data(g_cReceBuf);
293 1 if ((g_cReceBuf[1] != cPa[1]) || cStatus != SUCCESS)
294 1 {
295 2 return 13;
296 2 }
297 1 return SUCCESS;
298 1 }
299
300 /*****************************************************************************
301 * 发光管错误指示
302 *****************************************************************************/
303 void ShowError(unsigned char cTimes)
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 6
304 {
305 1 Delay100uS(5000);
306 1 while (cTimes--)
307 1 {
308 2 LED_error = 0;
309 2 Delay100uS(1000);
310 2 LED_error = 1;
311 2 Delay100uS(1000);
312 2 }
313 1 }
314 /*****************************************************************************
315 错误,蜂鸣器1s
316 *****************************************************************************/
317 void Err()
318 {
319 1 BEEP = 1;
320 1 Delay100uS(1000);
321 1 BEEP = 0;
322 1 }
323
324 /*****************************************************************************
325 系统初始化
326 *****************************************************************************/
327 void InitializeSystem()
328 {
329 1 TMOD = 0x21;
330 1 PCON |= 0x80;
331 1 SCON = 0xD0;
332 1 TH1 = 0xFD;
333 1 TL1 = TH1;
334 1 TR1 = 0;
335 1 IE |= 0x00;
336 1 }/*****************************************************************************
337 *IIC start condition
338 *****************************************************************************/
339 void I2CStart(void)
340 {
341 1 SDA = 1;
342 1 _nop_();
343 1 SCL = 1;
344 1 _nop_();
345 1 SDA = 0;
346 1 _nop_();
347 1 _nop_();
348 1 SCL = 0;
349 1 }
350 /*****************************************************************************
351 *IIC stop condition
352 *****************************************************************************/
353 void I2CStop(void)
354 {
355 1 SCL = 0;
356 1 _nop_();
357 1 SDA = 0;
358 1 _nop_();
359 1 _nop_();
360 1 SCL = 1;
361 1 _nop_();
362 1 SDA = 1;
363 1 }
364 /*****************************************************************************
365 *IIC wait ACK
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 7
366 *****************************************************************************/
367 bit I2CWaitAck(void)
368 {
369 1 unsigned char cErrTime = 255;
370 1 SDA = 1;
371 1 _nop_();
372 1 _nop_();
373 1 SCL = 1;
374 1 _nop_();
375 1 while(SDA)
376 1 {
377 2 cErrTime--;
378 2 _nop_();
379 2 _nop_();
380 2 _nop_();
381 2 _nop_();
382 2 _nop_();
383 2 _nop_();
384 2 _nop_();
385 2 _nop_();
386 2
387 2 if (0 == cErrTime)
388 2 {
389 3 I2CStop();
390 3 return FAILURE;
391 3 }
392 2 }
393 1 SCL = 0;
394 1 return SUCCESS;
395 1 }
396 /*****************************************************************************
397 *IC send ACK
398 *****************************************************************************/
399 void I2CSendAck(void)
400 {
401 1 _nop_();
402 1 SDA = 0;
403 1 _nop_();
404 1 _nop_();
405 1 SCL = 1;
406 1 _nop_();
407 1 SCL = 0;
408 1
409 1 }
410 /*****************************************************************************
411 *IIC send Not ACK
412 *****************************************************************************/
413 void I2CSendNotAck(void)
414 {
415 1 _nop_();
416 1 SDA = 1;
417 1 _nop_();
418 1 _nop_();
419 1 SCL = 1;
420 1 _nop_();
421 1 SCL = 0;
422 1 }
423 /*****************************************************************************
424 *IIC发送一个字节
425 *****************************************************************************/
426 void I2CSendByte(unsigned char cSendByte)
427 {
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 8
428 1 unsigned char data i = 8;
429 1 while (i--)
430 1 {
431 2 SCL = 0;
432 2 _nop_();
433 2 SDA = (bit)(cSendByte & 0x80);
434 2 cSendByte += cSendByte;
435 2 _nop_();
436 2 _nop_();
437 2 SCL = 1;
438 2 _nop_();
439 2
440 2 }
441 1 SCL = 0;
442 1 _nop_();
443 1
444 1 }
445 /*****************************************************************************
446 接收IIC一个字节
447 *****************************************************************************/
448 unsigned char I2CReceiveByte(void)
449 {
450 1 unsigned char data i = 8;
451 1 unsigned char data cR_Byte = 0;
452 1 SDA = 1;
453 1 while (i--)
454 1 {
455 2 cR_Byte += cR_Byte;
456 2 SCL = 0;
457 2 _nop_();
458 2 _nop_();
459 2 SCL = 1;
460 2 _nop_();
461 2 cR_Byte |= (unsigned char)SDA;
462 2 _nop_();
463 2
464 2 }
465 1 SCL = 0;
466 1 return cR_Byte;
467 1 }
468 /*****************************************************************************
469 读取IIC返回的数据
470 *****************************************************************************/
471 unsigned char Read_Iic_Data(unsigned char *cP)
472 {
473 1 unsigned char cCnt;
474 1 unsigned char cCheckSum = 0;
475 1 for (cCnt=0; cCnt<0xFF; cCnt++)
476 1 {
477 2 Delay100uS(1);
478 2 I2CStart();
479 2 I2CSendByte(READ_M101XX);
480 2 if (I2CWaitAck() == SUCCESS)
481 2 {
482 3 LED_UART = ~LED_UART;
483 3 break;
484 3 }
485 2 }
486 1 if (0xFF == cCnt)
487 1 {
488 2 return FAILURE;
489 2 }
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 9
490 1 cP[0]=2;
491 1 for (cCnt=0; cCnt<cP[0]; cCnt++) // in the protocol, cP[0] is the length of this data package
492 1 {
493 2 cP[cCnt] = I2CReceiveByte();
494 2 I2CSendAck();
495 2 cCheckSum ^= cP[cCnt];
496 2 }
497 1 cP[cCnt] = I2CReceiveByte();
498 1 I2CSendNotAck();
499 1 I2CStop();
500 1 if (cCheckSum != cP[cCnt])
501 1 {
502 2 return FAILURE;
503 2 }
504 1 else
505 1 {
506 2 return SUCCESS;
507 2 }
508 1 }
509 /*****************************************************************************
510 发送控制器命令
511 *****************************************************************************/
512 unsigned char Send_IIC_Command(unsigned char *cP)
513 {
514 1 unsigned char i;
515 1 unsigned char cCheckSum = 0;
516 1 I2CStart();
517 1 I2CSendByte(WRITE_M101XX);
518 1 if (I2CWaitAck() == SUCCESS)
519 1 {
520 2 for(i=0; i<cP[0]; i++)
521 2 {
522 3 cCheckSum ^= cP[i];
523 3 I2CSendByte(cP[i]);
524 3 if (I2CWaitAck() != SUCCESS)
525 3 {
526 4 return FAILURE;
527 4 }
528 3 }
529 2 I2CSendByte(cCheckSum);
530 2 if (I2CWaitAck() != SUCCESS)
531 2 {
532 3 return FAILURE;
533 3 }
534 2 I2CStop();
535 2 return SUCCESS;
536 2 }
537 1 else
538 1 {
539 2 return FAILURE;
540 2 }
541 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1145 ----
CONSTANT SIZE = 142 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 60 28
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
C51 COMPILER V7.07 M101_2_X_TEST 06/16/2007 18:14:26 PAGE 10
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -