小弟是单片机初学者,最近在24C02的数据传输问题上卡住了 。。看了好多资料都没进展,没办法只有求助各位大侠,帮小弟看看,万分感谢!!
这是我用EMC单片机编的,最后读出的寄存器上数据只有FE或FF,没能读出原先写进去的数据。。。。希望有大侠不吝赐教,花点点时间帮我看看有什么错漏,谢谢!!
;;;;;;;;;;;;;;;;;;;;;;写24C02数据;;;;;;;;;;;;;;
W_24C02:
WDTC
CALL I2C_START
MOV A,@0XA0
MOV AA,A
CALL I2C_SEND
CALL I2C_ACK
W_24C02_A:
MOV A,@0X20
MOV AA,A
CALL I2C_SEND
CALL I2C_ACK
W_24C02_B:
MOV A,@0XC6
MOV AA,A
CALL I2C_SEND
CALL I2C_ACK
CALL I2C_STOP
RET
;;;;;;;;;;;;;;;;;;;;24C02开始信号;;;;;;;;;;;;;;;;
I2C_START:
MOV A,@0X00
IOW P5
BS P5,SDA
CALL DELAY_02
BS P5,SCL
CALL DELAY_02
BC P5,SDA
CALL DELAY_02
BC P5,SCL
RET
;;;;;;;;;;;;;;;;;;;发送数据到24c02;;;;;;;;;;;;;;
I2C_SEND:
MOV A,@0X00
IOW P5
MOV A,@0X08
MOV BB,A
I2C_SEND_A:
BC AB,0
JBC AA,7
BS AB,0
JBS AB,0
JMP I2C_SEND_B
BS P5,SDA
JMP I2C_SEND_C
I2C_SEND_B:
BC P5,SDA
I2C_SEND_C:
BS P5,SCL
CALL DELAY_02
BC P5,SCL
RLC AA
DJZ BB
JMP I2C_SEND_A
RET
;;;;;;;;;;;;;;;;;;;;;;;;接收确认信号;;;;;;;;;;;;;;
I2C_ACK:
MOV A,@0X04
IOW P5
I2C_ACK_A:
BC P5,SCL
NOP
NOP
NOP
NOP
BS P5,SCL
NOP
NOP
NOP
NOP
JBC P5,SDA
JMP I2C_ACK_A
BC P5,SCL
RET
;;;;;;;;;;;;;;;;;;;;;;;;从24c02接收数据;;;;;;;;;;;;;;;
I2C_OUT:
MOV A,@0X08
MOV BB,A
MOV A,@0X04
IOW P5
I2C_OUT_A:
BC P5,SCL
BC CC,0
JBC P5,SDA
BS CC,0
RLC CC
DJZ BB
JMP I2C_OUT_A
RET
;;;;;;;;;;;;;;;;;;;;;;;发送停止信号;;;;;;;;;;;;;;;;;
I2C_STOP:
MOV A,@0X00
IOW P5
BC P5,SDA
CALL DELAY_02
BS P5,SCL
CALL DELAY_02
BS P5,SDA
CALL DELAY_02
BC P5,SCL
RET
DELAY_02:
NOP
WDTC
NOP
RET |