24read.asm

来自「MCS51系列单片机采用普通I/O实现I2C接口」· 汇编 代码 · 共 114 行

ASM
114 行
字号


          SCL   BIT   P1.5
          SDA   BIT   P1.4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       ORG      0000H
MAIN:     MOV   SP,#60H
          MOV   R0,  #30H                       ;------------读单字节
          MOV   R2,#00H
    XX:   LCALL START_BIT
          MOV   A,      #0A0H             ;器件寻址
          LCALL WRITE0
          LCALL ASK
          MOV   A,    R2                ;内部单元寻址
          LCALL WRITE0
          LCALL ASK
          LCALL START_BIT                   ;再发起始位

          MOV   A,    #0A1H                 ;发读信号
          LCALL WRITE0
          LCALL ASK
          
          
                                             ;读数据
          LCALL READ0
          MOV   @R0, A                    ;存数据
          INC   R0
          INC   R2
          CJNE  R2,#10H,XX
          SJMP  $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;------------------------------起始位
START_BIT: SETB    SCL
           NOP
           SETB    SDA
           NOP
           CLR     SDA
           NOP
           CLR     SCL
           RET

;--------------------------------停止位
STOP_BIT:  CLR      SDA
           NOP
           NOP
           SETB     SCL
           NOP
           NOP
           SETB     SDA
           NOP
           NOP
           CLR      SCL
           RET

;-----------------------------------从应答

ASK:        NOP
            NOP
            CLR   SCL
            NOP
            SETB  SDA
            NOP
            NOP
            SETB  SCL
            NOP
            NOP
   REP:     NOP
            NOP
            MOV    C, SDA                  ;保存应答位
            JC     REP
            CLR    SCL
            RET
;------------------------------------写入
WRITE0:     MOV     R7,   #8
 WRITE0_1:  CLR  SCL
            RLC  A
            MOV  SDA, C
            NOP
            NOP
            SETB SCL
            DJNZ R7,   WRITE0_1
            CLR  SCL
            RET

;------------------------------------读出
READ0:      MOV     R7,   #8
    READ0_1:
            MOV   P1,  #0FFH
            CLR   SCL
            NOP
            NOP
            MOV   C,   SDA
            RLC   A
            NOP
            NOP
            SETB  SCL
            DJNZ  R7,  READ0_1
            RET














⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?