关于IIC总线的一个程序,不知道那里错了,请教吧里大神
51单片机吧
全部回复
仅看楼主
level 8
将单片机内存30H到37H的内容写到24C02,50H为首地址的空间中,再读到单片机60H为首地址的内存中去。以下是程序,错了,检查不出来
ORG 0000H
JMP MAIN
ORG 0040H
MAIN:
SDA BIT P2.0
SCL BIT P2.1
MOV SP,#5FH
CALL START
MOV A,#0A0H
CALL WRITEBYTE
MOV A,#50H
CALL WRITEBYTE
MOV R0,#30H
CALL WRITEDATA
CALL STOP
CALL DELAY10US
CALL START
MOV A,#0A0H
CALL WRITEBYTE
MOV A,#50H
CALL WRITEBYTE
MOV A,#0A1H
CALL READDATA
MOV R1,#60H
CALL READDATA
CALL STOP
SJMP $
START:
SETB SDA
SETB SCL
NOP
NOP
CLR SDA
NOP
NOP
CLR SCL
RET
STOP:
CLR SDA
SETB SCL
NOP
NOP
SETB SDA
NOP
NOP
RET
ASK:
SETB SDA
SETB SCL
NOP
NOP
MOV C,SDA
CLR SCL
CLR C
RET
WRITEBYTE:
PUSH 0
MOV 0,#8
WRITE:
RLC A
MOV SDA,C
SETB SCL
NOP
NOP
CLR SCL
DJNZ 0,WRITE
CALL ASK
JC WRITEBYTE
POP 0
RET
WRITEDATA:
PUSH 0
MOV 0,#8
WRITED:
MOV A,@R0
CALL WRITEBYTE
INC R0
DJNZ 0,WRITED
POP 0
RET
READBYTE:
SETB SDA
PUSH 0
MOV 0,#8
READ:
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
NOP
NOP
DJNZ 0,READ
POP 0
RET
READDATA:
PUSH 0
MOV 0,#8
READD:
CALL READBYTE
MOV @R1,A
CLR SDA
SETB SCL
NOP
NOP
CLR SCL
INC R1
DJNZ 0,READD
SETB SDA
SETB SCL
NOP
NOP
CLR SCL
POP 0
RET
DELAY10US:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
END
2014年08月11日 08点08分 1
level 8
帮帮忙
2014年08月11日 09点08分 2
level 8
啊啊啊
2014年08月11日 09点08分 3
level 6
这么麻烦干啥呀,偷个懒,直接把单片机30H开始的内容写到60H开始的地址就好了,还用EEPROM干吗[哈哈]
2014年08月11日 11点08分 4
闲的蛋疼。。
2014年08月11日 11点08分
level 8
我调试好了,新手,我就是练习一下,好多错误
2014年08月11日 11点08分 5
1