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

📄 ex24.asm

📁 一个单片机串行EEPROM AT24C01扩展试验
💻 ASM
字号:
; 实验二十四  I2C 接口实验(AT24C01)

SCL  EQU  P1.6
SDA  EQU  P1.7

    ORG 0000H
MAIN:    
    MOV SP,#60H
    MOV P1,#0FFH
    CLR RS1
    MOV C,P1.3
    JNC READ
    MOV 38H,#6
    MOV 39H,#8
    MOV 3AH,#1
    MOV 3BH,#2
    MOV 3CH,#1
    MOV 3DH,#4
    MOV R0,#38H
    MOV 41H,#20H     ; CHIP ADDRESS TO BE WRITED
    MOV R7,#6
    MOV 40H,#0A0H   ; WRITE CHIP (DEVICE) COMMAND 
WR1:    
    MOV A,@R0          ;  DATA to be writed to be sent   A
    MOV 42H,A            
    ACALL WRITEEP
    INC R0
    INC 41H
    DJNZ R7,WR1
    MOV 30H,#1  ; after write,display 01
    MOV 31H,#0
    ACALL DSPLY
HERE1:    SJMP HERE1

READ:     MOV R7,#6
    MOV 40H,#0A0H
    MOV 41H,#20H
    MOV R0,#38H
RD1:    
    ACALL READEP
    MOV @R0,A
    INC R0
    INC 41H
    DJNZ R7,RD1
    MOV R7,#6
    MOV R0,#38H
    MOV 31H,#00H
RD2:    MOV 30H,@R0
    ACALL DSPLY
    ACALL DLT  ; DELAY 2 S
    INC R0
    DJNZ R7,RD2
HERE2:    SJMP HERE2

DSPLY:  MOV 33H,R0
    MOV 34H,R7
    CLR TI
    MOV  DPTR,#TAB
    MOV R0,#30H
    MOV R7,#2
DP0:
    MOV A,@R0
    MOVC A,@A+DPTR
    CPL A
    MOV SBUF,A
DP1:
    JNB TI,DP1
    CLR TI
    INC R0
    DJNZ R7,DP0
    MOV R0,33H
    MOV R7,34H
    RET

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
     DB 0FFH,00H,73H  ; 全亮;全灭;P

DLT:    MOV 35H,#20
DLT0:    MOV R6,#100
DLT1:     MOV R5,#250
DLT2:     DJNZ R5,DLT2
    DJNZ R6,DLT1
    DJNZ 35H,DLT0
    RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  NAME: WRITEEP
;  INPUT PARAMETER:
;      40H  device address command 
;      41H  address of location to be writed     
;      42H  number to be write
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITEEP:SETB RS1  ;SELECT WORK AREA ONE
    SETB SDA  ; START 
    SETB SCL
    ACALL DLY20US
    CLR SDA
    MOV R0,#40H
    MOV R7,#3
WREP1:
    MOV A,@R0 
    ACALL WBYTE
    SETB SCL
;    ACALL DLY20US
WACK:    MOV C,SDA
    JC WACK
    CLR SCL
    INC R0
    DJNZ R7,WREP1
    CLR SDA
    SETB SCL   ;STOP
    ACALL DLY20US
    SETB SDA

D20MS:    MOV R7,#40
D20MS0:    MOV R6,#250
D20MS1:    DJNZ R6,D20MS1
    DJNZ R7,D20MS0
    CLR RS1
    RET

DLY20US:
    MOV R3,#20
W20US:    DJNZ R3,W20US
    RET

;;;;;;;;;;;;;;;;;;;;    
; NAME: WBYTE
; INPUT PARAMETER: A
;;;;;;;;;;;;;;;;;;;;;;;
WBYTE:    MOV R6,#8
WB1:    CLR SCL
    RLC A
    MOV SDA,C
    ACALL DLY20US
    SETB SCL
    ACALL DLY20US
    DJNZ R6,WB1
    CLR SCL
    RET    
    
READEP:    
    SETB RS1  ;SELECT WORK AREA ONE
    SETB SDA  ; START 
    SETB SCL
    ACALL DLY20US
    CLR SDA
    MOV R0,#40H
    MOV R7,#2
RDEP1:
    MOV A,@R0 
    ACALL WBYTE
    SETB SCL
    NOP
    NOP
RDACK:    MOV C,SDA
    JC RDACK
    CLR SCL
    INC R0
    DJNZ R7,RDEP1
    NOP 
    SETB SDA 
    SETB SCL
    NOP
    NOP
    CLR SDA
    MOV A,#0A1H 
    ACALL WBYTE
    SETB SCL
    NOP
    NOP
RDACK1:    MOV C,SDA
    JC RDACK1
    CLR SCL
    MOV R7,#8
RDBIT:    
    SETB SCL
    ACALL DLY20US
    MOV C,SDA
    CLR SCL 
    RLC A
    ACALL DLY20US
    DJNZ R7,RDBIT
    SETB SCL
    NOP
    NOP
RDACK2:    MOV C,SDA
    JNC RDACK2
    CLR SCL
    CLR SDA
    SETB SCL   ;STOP
    NOP
    NOP
    SETB SDA
    CLR RS1
    RET

    end

⌨️ 快捷键说明

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