赞助论坛
  • 3434阅读
  • 0回复

24C02读写汇编程序 [复制链接]

楼层直达
zajzaj  
发帖
22
精华
0
金币
34
威望
1
贡献
0
好评
0
注册
2009-01-09
楼主    zajzaj 发表于: 2009-01-09 21:50:36 
24C02读写汇编程序

;简洁的24C02读写汇编
;--------------------------------------------
  I2C_SDA       EQU P1.6   ; PIN 5
  I2C_SCL       EQU P1.7   ; PIN 6

;=============================================
I2C_WRITE: ; WRITE 8 BYTES TO EEROM ; INPUT: A - A*8 = EEROM START ADDR
        ;                       R0 - RAN START ADDR
        ;                   USE: C, A, R0, R6, R7

    ACALL I2C_START
    ACALL OUT
    MOV R6, #8
WR_LP:MOV A, @R0
    ACALL OUT
    INC R0
    DJNZ R6, WR_LP
    AJMP I2C_STOP  

;==========================================
I2C_READ:   ; READ 8 BYTES FROM EEROM ; INPUT: A - A*8 = EEROM START ADDR
        ;                       R0 - RAN START ADDR
        ;                   USE: C, A, R0, R6, R7
   
    ACALL I2C_START
    ACALL OUT
    MOV R6, #8
    MOV A, #0A1H; #RDCMD
    ACALL OUTS
BRDLP:
      MOV R7, #8
      SETB I2C_SDA
INLP:   CLR I2C_SCL
      ACALL DELAY6
      SETB I2C_SCL
      NOP
      MOV C, I2C_SDA
      RLC A
      DJNZ R7, INLP
      CLR   I2C_SCL
      MOV @R0, A
      INC R0
  DJNZ R6, ACKLP
;;;;----------------------------
I2C_STOP:
      CLR I2C_SDA
      ACALL DELAY5
      SETB I2C_SCL
      ACALL DELAY5
      SETB I2C_SDA
DELAY6:
      NOP
DELAY5:
      NOP
      RET
;;-----------------------------
I2C_START:
    SWAP A
    RR A
    MOV R6, A
    MOV A, #0A0H; #WTCMD
    ACALL OUTS
    MOV A, R6
    RET
;-------------------------------            
ACKLP:
    CLR I2C_SDA
    SETB I2C_SCL
    ACALL DELAY5
    CLR I2C_SCL
    AJMP BRDLP
;=======================
OUTS:
    SETB I2C_SDA  
    SETB I2C_SCL
    ACALL DELAY5
    CLR I2C_SDA  
    ACALL DELAY5
    CLR I2C_SCL  
;========================
OUT:
    SETB C
    MOV R7, #9
OTLP: RLC A
    NOP
    MOV I2C_SDA, C
    NOP
    NOP
    SETB I2C_SCL
    ACALL DELAY5
    CLR I2C_SCL
    DJNZ R7, OTLP
    RET