home *** CD-ROM | disk | FTP | other *** search
/ 8051 Assembly Language Programming / easm51.iso / I2C.LIB < prev    next >
Encoding:
Text File  |  1997-01-07  |  3.5 KB  |  124 lines

  1. ;╔══════════════════════════════════════════════════════════════════════════╗
  2. ;║             Routine de gestion du bus I2C de Philips                     ║
  3. ;║         Dévelloppement et réalisation : ADAM Etienne  (c) 1994           ║
  4. ;╚══════════════════════════════════════════════════════════════════════════╝
  5. ; ┌──────────────┬───────────┬───────────┬──────────────────────────────────┐
  6. ; │      Nom     │   Entree  │  Sortie   │           Remarques              │
  7. ; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
  8. ; │ StartI2C     │    Néan   │  Néan     │ Place une condition de départ sur│
  9. ; │              │           │           │ le bus I2C. Les broches utilisées│
  10. ; │              │           │           │ sont définies par SCL et SDA     │
  11. ; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
  12. ; │ StopI2C      │    Néan   │  Néan     │ Condition de fin sur le bus I2C  │
  13. ; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
  14. ; │ SendByteI2C  │ A = byte  │  Néan     │ Envoye le contenu de l'accu par  │
  15. ; │              │           │           │ le bus I2C.                      │
  16. ; │              │           │           │ Si le device n'acquitte pas,     │ 
  17. ; │              │           │           │ le bit Carry est positionné. C=1 │
  18. ; │              │           │           │ ! Le régistre R7 est modifié !   │
  19. ; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
  20. ; │ RecByteI2C   │   Néan    │  A = byte │ Lit un byte par le bus I2C et    │ 
  21. ; │              │           │           │ renvoye la valeur dans l'accu    │ 
  22. ; │              │           │           │ ! Le régistre R7 est modifié !   │
  23. ; ├──────────────┼───────────┼───────────┼──────────────────────────────────┤
  24. ; │ AckI2C       │   Néan    │  Néan     │ Envoye un bit d'acquittement     │
  25. ; └──────────────┴───────────┴───────────┴──────────────────────────────────┘
  26. ;  
  27. ; EEPROM  EQU     10100000B     ; ADRESSE DE BASE D'UNE X2404             
  28.  
  29. SDA     EQU     0B3H            ;  (pin 13)
  30. SCL     EQU     0B2H            ;  (pin 12)
  31.  
  32. StartI2C        SETB    SCL
  33.         SETB    SDA
  34.         NOP
  35.         NOP
  36.         NOP
  37.         NOP
  38.         NOP
  39.         NOP
  40.         CLR     SDA
  41.         NOP
  42.         NOP
  43.         NOP
  44.         NOP
  45.         NOP
  46.         CLR     SCL
  47.         JB      SCL,$
  48.         NOP
  49.         RET
  50.       
  51. SendBitI2C      MOV     SDA,C
  52.         NOP
  53.         NOP
  54.         SETB    SCL
  55. SendWS          JNB     SCL,SendWS      ; ATTEND FIN DE WAIT STATE DEVICE
  56.         NOP
  57.         NOP
  58.         NOP
  59.         NOP
  60.         NOP
  61.         NOP
  62.         NOP
  63.         NOP
  64.         CLR     SCL
  65.         NOP
  66.         SETB    SDA
  67.         NOP
  68.         RET
  69.         
  70. ReceiveBitI2C   MOV     A,#0
  71.         SETB    SCL
  72. RecWS           JNB     SCL,RecWS       ; ATTEND FIN WAIT STATE DEVICE                
  73.         NOP
  74.         MOV     C,SDA
  75.         RLC     A               ; lit 2 fois la ligne SDA
  76.         MOV     C,SDA
  77.         RLC     A
  78.         CLR     C               ; met le Carry = 0 si bit = 0
  79.         CLR     SCL
  80.         NOP
  81.         JZ      FinReceiveBit
  82.         SETB    C               ; met le carry = 1 si bit = 1
  83. FinReceiveBit   RET
  84.  
  85. StopI2C         CLR     SDA
  86.         NOP
  87.         NOP
  88.         NOP
  89.         SETB    SCL
  90. StopWS          JNB     SCL,StopWS      ; ATTEND FIN WAIT STATE DEVICE
  91.         NOP
  92.         NOP
  93.         NOP
  94.         NOP
  95.         NOP
  96.         SETB    SDA
  97.         NOP
  98.         NOP
  99.         NOP
  100.         NOP
  101.         NOP
  102.         RET
  103.  
  104. SendByteI2C     MOV     R7,#8
  105. SbI2C           RLC     A
  106.         LCALL   SendBitI2C
  107.         DJNZ    R7,SbI2C
  108.         LCALL   ReceiveBitI2C
  109.         RET
  110.  
  111. RecByteI2C      MOV     R7,#8
  112.         MOV     A,#0
  113. RbyteI2C        PUSH    ACC
  114.         LCALL   ReceiveBitI2C
  115.         POP     ACC
  116.         RLC     A
  117.         DJNZ    R7,RbyteI2C
  118.         RET
  119.  
  120. AckI2C          CLR     C
  121.         ACALL   SendBitI2C
  122.         RET
  123.  
  124.