⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24cxx.asm

📁 MCS51系列单片机采用普通I/O实现I2C接口
💻 ASM
字号:



          SCL   BIT   P1.5
          SDA   BIT   P1.4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       ORG      0000H
MAIN:     MOV   SP,     #60H
          MOV   R1,     #30H
          MOV   R2,     #00H
                                      ;-------------写单字节
          LCALL   START_BIT
          MOV     A,    #0A0H           ;器件寻址
          LCALL   WRITE0
          LCALL   ASK
          MOV     A,    #00H             ;内部单元寻址
          LCALL   WRITE0
          LCALL   ASK
          MOV     A,     #77H                ;单字节写入
          LCALL   WRITE0
          LCALL   ASK
          LCALL   STOP_BIT

          LCALL   DELAY_C02

                                           ;------------读单字节
          LCALL START_BIT
          MOV   A,      #0A0H             ;器件寻址
          LCALL WRITE0
          LCALL ASK
          MOV   A,    #00H                 ;内部单元寻址
          LCALL WRITE0
          LCALL ASK
          LCALL START_BIT                   ;再发起始位

          MOV   A,    #0A1H                 ;发读信号
          LCALL WRITE0
          LCALL ASK
                                             ;读数据
          LCALL READ0
           MOV   @R1,   A                    ;存数据
          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:     ;CLR    SCL
            NOP
            NOP
            ;;SETB   SDA
            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
;---------------------------------------
DELAY_C02:     MOV   R4,  #10H
       DELAY_1:MOV   R3,  #00H
               DJNZ  R3,  $
               DJNZ  R4,  DELAY_1
               RET
















⌨️ 快捷键说明

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