📄 display.lst
字号:
CX51 COMPILER V7.20 DISPLAY 08/15/2005 15:35:54 PAGE 8
427 2 SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
428 2 _Nop();
429 2 _Nop(); /*保证时钟高电平周期大于4μs*/
430 2 _Nop();
431 2 _Nop();
432 2 _Nop();
433 2 SCL=0;
434 2 }
435 1
436 1 _Nop();
437 1 _Nop();
438 1 SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
439 1 _Nop();
440 1 _Nop();
441 1 SCL=1;
442 1 _Nop();
443 1 _Nop();
444 1 _Nop();
445 1 if(SDA==1)
446 1 sendack=0;
447 1 else
448 1 sendack=1; /*判断是否接收到应答信号*/
449 1 SCL=0;
450 1 _Nop();
451 1 _Nop();
452 1 return(sendack);
453 1 }
454
455
456
457
458
459
460 /*******************************************************************
461 字节数据传送函数
462 函数原型: uchar RcvByte();2464使用
463 功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),
464 发完后请用应答函数。
465 ********************************************************************/
466 uchar RcvByte2464()
467 {
468 1 uchar retc;
469 1 uchar BitCnt;
470 1 TOGGLE_WD();
471 1 retc=0;
472 1 SDA=1; /*置数据线为输入方式*/
473 1 for(BitCnt=0;BitCnt<8;BitCnt++)
474 1 {
475 2 _Nop();
476 2 SCL=0; /*置时钟线为低,准备接收数据位*/
477 2 _Nop();
478 2 _Nop(); /*时钟低电平周期大于4.7μs*/
479 2 _Nop();
480 2 _Nop();
481 2 _Nop();
482 2 SCL=1; /*置时钟线为高使数据线上数据有效*/
483 2 _Nop();
484 2 _Nop();
485 2 retc=retc<<1;
486 2 if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
487 2 _Nop();
488 2 _Nop();
CX51 COMPILER V7.20 DISPLAY 08/15/2005 15:35:54 PAGE 9
489 2 }
490 1 SCL=0;
491 1 _Nop();
492 1 _Nop();
493 1 return(retc);
494 1 }
495
496 /*******************************************************************
497 向无子地址器件发送字节数据函数
498 函数原型: bit ISendByte(uchar sla,ucahr c);
499 功能: 从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
500 如果返回1表示操作成功,否则操作有误。
501 注意: 使用前必须已结束总线。
502 ********************************************************************/
503 bit ISendByte(uchar sla,uchar c)
504 {
505 1
506 1 Start_I2c(); /*启动总线*/
507 1 if(SendByte2464(sla)==0) /*发送器件地址*/
508 1 return(0);
509 1 if(SendByte2464(c)==0) /*发送数据*/
510 1 return(0);
511 1 Stop_I2c(); /*结束总线*/
512 1 return(1);
513 1 }
514
515
516
517
518 /*******************************************************************
519 向有子地址器件发送多字节数据函数
520 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
521 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
522 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
523 如果返回1表示操作成功,否则操作有误。
524 注意: 使用前必须已结束总线。
525 ********************************************************************/
526 bit ISendStr(uchar sla,uchar masa,uchar suba,uchar *s,uchar no)
527 {
528 1 uchar i;
529 1 TOGGLE_WD();
530 1 startwait(5); /*80ms*/
531 1 Start_I2c(); /*启动总线*/
532 1 if(SendByte2464(sla)==0) /*发送器件地址*/
533 1 return(0);
534 1 if(sla!=i8563)
535 1 {
536 2 if(SendByte2464(masa)==0) /*发送器件子地址high*/
537 2 return(0);
538 2 }
539 1 if(SendByte2464(suba)==0) /*发送器件子地址*/
540 1 return(0);
541 1
542 1 for(i=0;i<no;i++)
543 1 { TOGGLE_WD();
544 2 if(SendByte2464(*s)==0) /*发送数据*/
545 2 return(0);
546 2 s++;
547 2 }
548 1 Stop_I2c(); /*结束总线*/
549 1 return(1);
550 1 }
CX51 COMPILER V7.20 DISPLAY 08/15/2005 15:35:54 PAGE 10
551
552
553
554
555
556
557 /*******************************************************************
558 向无子地址器件读字节数据函数
559 函数原型: bit IRcvByte(uchar sla,ucahr *c);
560 功能: 从启动总线到发送地址,读数据,结束总线的全过程,从器件地
561 址sla,返回值在c.
562 如果返回1表示操作成功,否则操作有误。
563 注意: 使用前必须已结束总线。
564 ********************************************************************/
565 bit IRcvByte(uchar sla,uchar *c)
566 {
567 1 Start_I2c(); /*启动总线*/
568 1 if(SendByte2464(sla+1)==0) /*发送器件地址*/
569 1 return(0);
570 1 *c=RcvByte(); /*读取数据*/
571 1 Ack_I2c(1); /*发送非就答位*/
572 1 Stop_I2c(); /*结束总线*/
573 1 return(1);
574 1 }
575
576
577
578 /*******************************************************************
579 向有子地址器件读取多字节数据函数
580 函数原型: bit ISendStr(uchar sla,uchar suba,ucahr *s,uchar no);
581 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
582 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
583 如果返回1表示操作成功,否则操作有误。
584 注意: 使用前必须已结束总线。
585 ********************************************************************/
586 bit IRcvStr(uchar sla,uchar masa,uchar suba,uchar *s,uchar no)
587 {
588 1 uchar i;
589 1 TOGGLE_WD();
590 1 startwait(5); /*80ms*/
591 1 Start_I2c(); /*启动总线*/
592 1 if(SendByte2464(sla)==0) /*发送器件地址*/
593 1 return(0);
594 1 if(sla!=i8563)
595 1 {
596 2 if(SendByte2464(masa)==0) /*发送器件子地址high*/
597 2 return(0);
598 2 }
599 1 if(SendByte2464(suba)==0) /*发送器件子地址*/
600 1 return(0);
601 1
602 1 Start_I2c();
603 1 if(SendByte2464(sla+1)==0)
604 1 return(0);
605 1
606 1 for(i=0;i<no-1;i++)
607 1 { TOGGLE_WD();
608 2 *s=RcvByte2464(); /*发送数据*/
609 2 Ack_I2c(0); /*发送就答位*/
610 2 s++;
611 2 }
612 1 *s=RcvByte2464();
CX51 COMPILER V7.20 DISPLAY 08/15/2005 15:35:54 PAGE 11
613 1 Ack_I2c(1); /*发送非应位*/
614 1 Stop_I2c(); /*结束总线*/
615 1 TOGGLE_WD();
616 1 return(1);
617 1 }
618
619
620
621 /* 完毕 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1693 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 40
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 2
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
CX51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -