📄 i2c.lst
字号:
466 1 I2C_SET_CLK(LOW);
467 1 I2C_LOW;
468 1 } /* I2C_SetACK */
469
470
471 /* -------------------------------------------------------------------
472 Name: I2C_SetNAK -
473 Purpose: .
474 Passed: None.
475 Returns: None.
476 Notes:
477 ------------------------------------------------------------------- */
478 void I2C_SetNAK (void)
479 {
480 1 I2C_SET_DAT(HIGH);
481 1 I2C_SU_DAT; // Added by JC 01:53PM 2005/11/23
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 9
482 1
483 1 I2C_SET_CLK(HIGH);
484 1 I2C_HIGH;
485 1
486 1 I2C_SET_CLK(LOW);
487 1 I2C_LOW;
488 1 } /* I2C_SetNAK */
489
490
491 /* -------------------------------------------------------------------
492 Name: I2C_Start - START condition (SDA falling edge).
493 Purpose: .
494 Passed: None.
495 Returns: None.
496 Notes:
497 Reference:
498 [1] p64
499 ------------------------------------------------------------------- */
500 void I2C_Start (void)
501 {
502 1 I2C_SET_DAT(HIGH);
503 1
504 1 I2C_SET_CLK(HIGH);
505 1 I2C_SU_STA;
506 1
507 1
508 1 I2C_SET_DAT(LOW);
509 1 I2C_HD_STA;
510 1
511 1 I2C_SET_CLK(LOW);
512 1 I2C_LOW;
513 1 } /* I2C_Start */
514
515
516 /* -------------------------------------------------------------------
517 Name: I2C_Stop - STOP condition (SDA rising edge).
518 Purpose: .
519 Passed: None.
520 Returns: None.
521 Notes:
522 Reference:
523 [1] p64
524
525 ------------------------------------------------------------------- */
526 void I2C_Stop (void)
527 {
528 1 I2C_SET_DAT(LOW);
529 1
530 1 I2C_SET_CLK(HIGH);
531 1 I2C_SU_STO;
532 1
533 1 I2C_SET_DAT(HIGH);
534 1 } /* I2C_Stop */
535
536
537 #if (I2C_TX_BURST)
/* -------------------------------------------------------------------
Name: I2C_TxBurst -
Purpose: To transmit bulk data to I2C slave device.
Passed:
bCNT: 1..255. (Excludes slave address and sub-address)
Returns: None.
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 10
Notes:
The bSLA should be the slave device's 'WRITE' module addres,
not 'READ' one.
------------------------------------------------------------------- */
void I2C_TxBurst (
UB8 bSLA, /* I2C slave address */
UB8 bREG, /* I2C sub-address */
UB8 bCNT, /* The number of data which will be transmitted */
UB8 *pbDATA /* Point to the first DATA item */
)
{
UB8 bIdx;
I2C_Start();
I2C_TxData(bSLA);
I2C_GetACK();
I2C_TxData(bREG);
I2C_GetACK();
for (bIdx = 0; bIdx < bCNT; bIdx++)
{
I2C_TxData(*pbDATA++);
I2C_GetACK();
} /* for */
I2C_Stop();
} /* I2C_TxBurst */
#endif
575
576
577 #if (I2C_TX_BYTE)
578 /* -------------------------------------------------------------------
579 Name: I2C_TxByte -
580 Purpose: To transmit one byte data to I2C slave device.
581 Passed:
582 Returns: None.
583 Notes:
584 The bSLA should be the slave device's 'WRITE' module addres,
585 not 'READ' one.
586 ------------------------------------------------------------------- */
587 void I2C_TxByte (
588 UB8 bSLA, /* I2C slave address */
589 UB8 bREG, /* I2C sub-address */
590 UB8 bDATA /* DATA item */
591 )
592 {
593 1 I2C_Start();
594 1
595 1 I2C_TxData(bSLA);
596 1 I2C_GetACK();
597 1
598 1 I2C_TxData(bREG);
599 1 I2C_GetACK();
600 1
601 1 I2C_TxData(bDATA);
602 1 I2C_GetACK();
603 1
604 1 I2C_Stop();
605 1 } /* I2C_TxByte */
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 11
606 #endif
607
608
609 /* -------------------------------------------------------------------
610 Name: I2C_TxData -
611 Purpose: To do I2C parallel serial conversion for transmission.
612 Passed:
613 Returns: None.
614 Notes:
615 ------------------------------------------------------------------- */
616 void I2C_TxData (UB8 bData)
617 {
618 1 UB8 bMask;
619 1
620 1
621 1 /* MSB is sent first */
622 1 for (bMask = 0x80; bMask; bMask >>= 1)
623 1 {
624 2 I2C_SET_DAT(bData & bMask);
625 2 I2C_SU_DAT;
626 2
627 2 I2C_SET_CLK(HIGH);
628 2 I2C_HIGH;
629 2
630 2 I2C_SET_CLK(LOW);
631 2 }
632 1
633 1 I2C_SET_DAT(HIGH); // Added by JC 01:47PM 2005/11/23
634 1 } /* I2C_TxData */
635
636
637 #if (I2C_TX_WORD)
/* -------------------------------------------------------------------
Name: I2C_TxWord -
Purpose: To transmit bulk data to I2C slave device.
Passed:
Returns: None.
Notes:
------------------------------------------------------------------- */
void I2C_TxWord (
UB8 bSLA, /* I2C slave address */
UB8 bREG, /* I2C sub-address */
UW16 wDATA /* DATA item */
)
{
I2C_Start();
I2C_TxData(bSLA);
I2C_GetACK();
I2C_TxData(bREG);
I2C_GetACK();
I2C_TxData(wDATA & 0xFF);
I2C_GetACK();
I2C_TxData(wDATA >> 8);
I2C_GetACK();
I2C_Stop();
} /* I2C_TxWord */
#endif
C51 COMPILER V7.50 I2C 02/05/2007 16:33:25 PAGE 12
668
669
670
671 /* -------------------------------------------------------------------
672 Name: -
673 Purpose: .
674 Passed: None.
675 Returns: None.
676 Notes:
677 ------------------------------------------------------------------- */
678
679
680 /* **********************************************************************
681
682 Description:
683
684
685 ********************************************************************** */
686
687 /* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
688
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 271 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -