📄 at24c02.asm
字号:
;--TAB=8----------------------------------------------------------;
;*****************************************************************;
;*****************************************************************;
;** at24c02.asm **;
;** **;
;** version 1.0 **;
;** **;
;** update 2002/5/6 **;
;** **;
;** **;
;** **;
;*****************************************************************;
;*****************************************************************;
;-----------------------------------------------------------------;
AT24C_SCL EQU P1.4
AT24C_SDA EQU P1.5
CHIP_RD EQU 10100001B
CHIP_WR EQU 10100000B
CHIP_PT2257 EQU 10001000B
;-----------------------------------------------;
$..\SRC\dvd.H
extern _R
;-----------------------------------------------;
RSEG CODE ;
;-----------------------------------------------;
;Name: Lsb_AtReadPage ;
;In: R0=BUF B=count R1=at24c address ;
;out: c=0:ok c=1:error ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_AtReadPage:
;--(1) dummy byte write-----------------;
CALL Lsb_ShifStart ;start
JC rp_4
MOV A,#CHIP_WR ;out device address or write
CALL Lsb_ShiftOut
JC rp_3
MOV A,R1 ;out data address
CALL Lsb_ShiftOut
JC rp_3
;--(2)curent read data------------------;
CALL Lsb_ShifStart ;start
JC rp_4
MOV A,#CHIP_RD ;out device address or read
CALL Lsb_ShiftOut
JC rp_3
JNC rp_2
rp_1: CALL Lsb_ShiftACK ;out ACK to next
rp_2: CALL Lsb_ShiftIn
MOV @R0,A
INC R0
DJNZ B,rp_1
CALL Lsb_ShiftNAK ;end out NAK
CLR C
rp_3: CALL Lsb_ShifStop
rp_4: RET
;-----------------------------------------------;
;Name: Lsb_AtWritePage ;
;In: R0=BUF B=count R1=flash address ;
;out: c=0:ok c=1:error ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_AtWritePage:
CALL Lsb_ShifStart ;OUT START
JC wp_2
MOV A,#CHIP_WR ;OUT device addr
CALL Lsb_ShiftOut
JC wp_1
MOV A,R1 ;OUT DATA addr
CALL Lsb_ShiftOut
JC wp_1
wp_0: MOV A,@R0
CALL Lsb_ShiftOut
JC wp_1
INC R0
DJNZ B,wp_0
CLR C
wp_1: CALL Lsb_ShifStop ;STOP
wp_2: MOV A,#12
CALL Lsb_Delay
RET
;-----------------------------------------------;
;Name: Lsb_ShifStart ;
;In: NO ;
;out: C=0:OK C=1:ERORR ;
;SCL: LOW-->Low ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_ShifStart:
SETB AT24C_SDA
SETB AT24C_SCL
JNB AT24C_SDA,ss_1 ;bus test
JNB AT24C_SCL,ss_1
NOP
NOP
CLR AT24C_SDA
NOP
NOP
NOP
NOP
NOP
CLR AT24C_SCL
CLR C
JMP ss_2
ss_1: SETB C
ss_2: RET
;-----------------------------------------------;
;Name: Lsb_ShifStop ;
;In: no ;
;out: no ;
;SCL: LOW-->HI ;
;SDA: -->HI ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_ShifStop:
CLR AT24C_SDA
NOP
NOP
SETB AT24C_SCL
NOP
NOP
NOP
NOP
NOP
SETB AT24C_SDA
RET
;-----------------------------------------------;
;Name: Lsb_ShiftNAK ;
;In: no ;
;out: no ;
;SCL: Low-->Low ;
;update: 200/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_ShiftNAK:
SETB AT24C_SDA
NOP
NOP
SETB AT24C_SCL
NOP
NOP
NOP
NOP
CLR AT24C_SCL
RET
;-----------------------------------------------;
;Name: Lsb_ShiftACK ;
;In: NO ;
;out: NO ;
;SCL: Low-->Low ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_ShiftACK:
CLR AT24C_SDA
NOP
NOP
SETB AT24C_SCL
NOP
NOP
NOP
NOP
CLR AT24C_SCL
RET
;-----------------------------------------------;
;Name: Lsb_ShiftOut ;
;In: A=byte ;
;out: c=ACK C=0:OK C=1:ERROR ;
;CLS: Low-->Low ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_ShiftOut:
PUSH B
MOV B,#8
so_1: RLC A ;out byte
MOV AT24C_SDA,C
NOP
NOP
SETB AT24C_SCL
NOP
NOP
NOP
NOP
NOP
CLR AT24C_SCL
DJNZ B,so_1
SETB AT24C_SDA
NOP
NOP
SETB AT24C_SCL ;read ack
NOP
NOP
NOP
NOP
NOP
MOV C,AT24C_SDA
CLR AT24C_SCL
POP B
RET
;-----------------------------------------------;
;Name: Lsb_ShiftIn ;
;In: NO ;
;out: A=byte ;
;SCL: Low-->Low ;
;update: 2002/5/24 ;
;check: ycd_1 ;
;-----------------------------------------------;
Lsb_ShiftIn:
PUSH B ;read byte
MOV B,#8
si_1: SETB AT24C_SDA
NOP
NOP
SETB AT24C_SCL
NOP
NOP
NOP
NOP
MOV C,AT24C_SDA
RLC A
CLR AT24C_SCL
DJNZ B,si_1
POP B
RET
;-----------------------------------------------;
;Name: Lsb_WritePt2257 ;
;In: R0=BUF B=count ;
;out: c=0:ok c=1:error ;
;update: 2002/5/24 ;
;check: ReadAt24c ;
public Lsb_ReadAt24c ;
extern gRadioBuf ;
;-----------------------------------------------;
Lsb_ReadAt24c:
PUSH B
PUSH _R
PUSH _R+1
MOV R0,#gRadioBuf
MOV A,R6
MOV R1,A
MOV B,R7
CALL Lsb_AtReadPage
POP _R+1
POP _R
POP B
RET
;-----------------------------------------------;
;Name: Lsb_WriteAt24c ;
;In: R0=BUF B=count ;
;out: c=0:ok c=1:error ;
;update: 2002/8/22 ;
;check: WriteAt24c_1 ;
public Lsb_WriteAt24c ;
;-----------------------------------------------;
Lsb_WriteAt24c:
PUSH B
PUSH _R
PUSH _R+1
MOV R0,#gRadioBuf
MOV A,R6
MOV R1,A
MOV B,R7
CALL Lsb_AtWritePage
POP _R+1
POP _R
POP B
RET
;===========================================================================;
;===========================================================================;
;-----------------------------------------------;
;Name: Lsb_WritePt2257 ;
;In: R0=BUF B=count ;
;out: c=0:ok c=1:error ;
;update: 2002/5/24 ;
;check: ycd_1 ;
extern gPt2257Buf ;
extern gPt2257Count ;
public Lsb_WritePt2257 ;
;-----------------------------------------------;
Lsb_WritePt2257:
PUSH B
PUSH _R
MOV R0,#gPt2257Count
MOV B,@R0
MOV R0,#gPt2257Buf
;-(1) OUT START-----;
CALL Lsb_ShifStart
JC wpt_2
;-(2) OUT device addr-;
MOV A,#CHIP_PT2257
CALL Lsb_ShiftOut
JC wpt_1
;-(3) data--;
wpt_0: MOV A,@R0
CALL Lsb_ShiftOut
JC wpt_1
INC R0
DJNZ B,wpt_0
CLR C
;-(4) STOP---------;
wpt_1: CALL Lsb_ShifStop
wpt_2: POP _R
POP B
RET
;-----------------------------------------------;
;Name:Lsb_Delay ;
;Function: delay number ms ;
;In: A=number 1-256 ;
;out: ;
;update: ;
;check: 2 ;
public Lsb_Delay ;
;-----------------------------------------------;
Lsb_Delay:
PUSH B
PUSH Direct_R2
MOV R2,A
dly_1: MOV B,#250
dly_2: NOP
NOP
DJNZ B,dly_2
DJNZ R2,dly_1
POP Direct_R2
POP B
RET
;-----------------------------------------------;
;Name:Lst_ResetDelay ;
;Function: delay number ms ;
;In: A=number 1-256 ;
;out: ;
;update: ;
;check: 2 ;
public Lst_ResetDelay ;
;-----------------------------------------------;
Lst_ResetDelay:
MOV A,#10
CALL Lsb_Delay
RET
;===========================================================================;
;===========================================================================;
;---------------------------------------------------------------------------;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -