📄 24c16.asm
字号:
;AT24C16读写程序
A_SDA BIT P1.1
A_SCL BIT P1.0
A_ADDR EQU 55H
A_DATA EQU 77H
ORG 0000H
AJMP MAIN
;
;***************************************************************
; /*主程序*/ *
;***************************************************************
;
ORG 0030H
MAIN: CALL A_WRITE
CALL A_READ ;不等送0
MAIN1: MOV R0,A
CALL DISP
CALL DELAY
CALL DELAY ;显示
AJMP $
DISP: MOV A,R0 ;低位
ANL A,#0FH
ACALL DSEND ;显示
MOV A,R0
SWAP A
ANL A,#0FH ;高位
ACALL DSEND ;显示
RET
;
DSEND: MOV DPTR,#SGTB1
MOVC A,@A+DPTR ;取字符
MOV SBUF,A ;发送字符
JNB TI,$ ;等待串口发送完
CLR TI
RET
;
;***************************************************************
; /*写数据到指定的地址中*/ *
;***************************************************************
;
A_WRITE: SETB A_SCL
SETB A_SDA
CLR A_SDA ;开始信号,启动AT24C16
MOV A,#0A0H ;送控制字:写
CALL A_SEND ;调用发送字节子程序
MOV A,#A_ADDR ;送片内字节地址
CALL A_SEND
MOV A,#A_DATA ;送数据
CALL A_SEND
CLR A_SDA ;停止信号
NOP
NOP
SETB A_SCL
NOP
NOP
SETB A_SDA
CALL DELAY
RET
;
;***************************************************************
; /*从指定的地址中读出数据*/ *
;***************************************************************
;
A_READ: SETB A_SCL
SETB A_SDA
CLR A_SDA ;开始信号,启动AT24C16
MOV A,#0A0H ;送控制字:写
CALL A_SEND ;调用发送字节子程序
MOV A,#A_ADDR ;指定地址
CALL A_SEND
SETB A_SCL
SETB A_SDA
CLR A_SDA
MOV A,#0A1H ;送控制字:读
CALL A_SEND
CALL A_RECEIVE ;接收数据
CLR A_SDA
NOP
NOP
SETB A_SCL
NOP
NOP
SETB A_SDA
RET
;
;***************************************************************
; /*字节发送子程序*/ *
;***************************************************************
;
A_SEND: MOV R0,#08H
A_SEND1: CLR A_SCL
RLC A
MOV A_SDA,C
NOP
SETB A_SCL
NOP
NOP
NOP
DJNZ R0,A_SEND1
CLR A_SCL ;第9个脉冲准备取应答位
NOP
NOP
NOP
SETB A_SCL
A_LOOP: MOV C,A_SDA
JC A_LOOP ;应答到否
CLR A_SCL
RET
;
;***************************************************************
; /*字节接收子程序*/ *
;***************************************************************
;
A_RECEIVE: MOV R0,#08H
A_REC: SETB A_SCL
NOP
NOP
MOV C,A_SDA
RLC A
CLR A_SCL
NOP
NOP
DJNZ R0,A_REC
SETB A_SDA ;最后一个字节SDA置1
NOP
NOP
SETB A_SCL ;第9个脉冲
NOP
NOP
CLR A_SCL
RET
;
;***************************************************************
; /*延时子程序*/ *
;***************************************************************
;
DELAY: MOV R6,#10 ;延时
DELAY1: MOV R7,#250
DJNZ R7,$
DJNZ R6,DELAY1
RET
;
;***************************************************************
; /*字符编码*/ *
;***************************************************************
;
SGTB1: DB 03H ;0
DB 9FH ;1
DB 25H ;2
DB 0DH ;3
DB 99H ;4
DB 49H ;5
DB 41H ;6
DB 1FH ;7
DB 01H ;8
DB 09H ;9
DB 11H ;A
DB 0C1H ;B
DB 63H ;C
DB 85H ;D
DB 61H ;E
DB 71H ;F
DB 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -