下面程序我先向AT24C01写入4,再读出,可却读出的是P3全为0,不之是什么原因,希望各位大侠能帮帮忙,还有这里面的读写首地址00H要不要发给AT24C01呢
ORG 0000H SDA BIT P1.0 SCL BIT P1.1 MAIN: MOV SP,#60H MOV DPTR,#SEG MOV R0, #00H MOV R1,#02H MOV 00H,#4 LP0: LCALL STA MOV A,#0A0H LCALL WRITE 写以个字节 LCALL CACK 判断是不是应答信号 JC LP0 LP1:MOV A,@R0 送AT24C01中要写的地址00H,并写入数据4 LCALL WRITE LCALL CACK JC LP0 INC R0 DJNZ R1,LP1 LCALL ST0 LCALL DELAY10MS LP2:LCALL STA 开始读数据准备,采用立即读方法 MOV A,#0A0H LCALL WRITE LCALL CACK JC LP2 LP3:MOV A,#00H 送AT24C01中要读出的数据的地址 LCALL WRITE LCALL CACK JC LP3 LP4:MOV A,#0A1H LCALL WRITE LCALL CACK JC LP4 LCALL READ MOV R3,A LCALL MNCK 主机不产生应答信号 LCALL ST0 结束 LCALL DELAY10MS DISPLAY: MOV A,R3 显示出读出的数 MOVC A,@A+DPTR MOV P3,A LCALL DELAY10MS LJMP DISPLAY STA: SETB SDA // 开始 SETB SCL NOP NOP NOP NOP CLR SDA NOP NOP NOP NOP CLR SCL RET ST0: CLR SDA // 结束 SETB SCL NOP NOP NOP NOP SETB SDA NOP NOP NOP CLR SCL RET READ:MOV R5,#8 //读一个字节 RLP: SETB SDA SETB SCL MOV C,SDA MOV A,R6 RLC A MOV R6,A CLR SCL DJNZ R7,RLP RET WRITE: MOV R7,#8 //写一个字节 WLP: CLR C RLC A JC WR1 CLR SDA SETB SCL NOP NOP NOP NOP CLR SCL DJNZ R7,WLP RET WR1: SETB SDA SETB SCL NOP NOP NOP CLR SCL DJNZ R7,WLP RET CACK: SETB SDA SETB SCL NOP NOP MOV C,SDA NOP CLR SCL NOP RET MNCK: SETB SDA SETB SCL NOP NOP NOP NOP CLR SCL CLR SDA NOP RET DELAY10MS:MOV R7,#20 DEL: MOV R6,#0F8H DJNZ R6,$ DJNZ R7,DEL RET SEG: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH END
|