各位大虾帮帮忙
我往93c46的一个指定地址里写数据,可发现写完数据后从93c46的其他存储地址里读出来的数据居然也是相同的一个数,不知道是为什么。各位大虾帮忙看看:
使用89c51控制,片选端接p3.0,CLK接p1.7,DI接p1.6,DO接p1.5
写数据程序:
;入口条件:写操作的起始位、命令码和地址存于DPTR,需写入的数据存于R0间址单元
;出口条件:数据写入EEPROM中指定的地址单元
ORG 0000H
AJMP WRITE
WRITE: ACALL EWEN ;擦/写允许
CLR P3.0 ;CS=0,DO恢复高阻态
NOP
SETB P3.0 ;CS=1
MOV R7,#08H
MOV DPH,#00000010B
LOOP3: CLR P1.7 ;CLK=0
MOV A,DPH
RLC A
MOV DPH,A
MOV P1.6,C ;DI=C
NOP
SETB P1.7 ;CLK=1
DJNZ R7,LOOP3
MOV R7,#08H
LOOP4: CLR P1.7 ;CLK=0
MOV A,DPL
RLC A
MOV DPL,A
MOV P1.6,C ;DI=C
NOP
SETB P1.7 ;CLK=1
DJNZ R7,LOOP4
MOV R7,#08H
LOOP5: CLR P1.7 ;CLK=0
MOV A,@R0
RLC A
MOV @R0,A
MOV P1.6,C ;DI=C
NOP
SETB P1.7 ;CLK=1
DJNZ R7,LOOP5
CLR P3.0 ;CS=0,启动自定时
NOP
SETB P3.0
SETB P1.5 ;检测状态
NOP
LOOP6: JNB P1.5,LOOP6
NOP
CLR P3.0 ;CS=0
ACALL EWDS ;擦/写禁止
SJMP $
读数据程序:
;入口条件:DPTR中放入起始位、命令码、指定单元地址
;出口条件:读出数据存于R0间址单元
ORG 0000H
AJMP READ
READ: CLR P3.0 ;CS=0,DO恢复高阻态
NOP
SETB P3.0 ;CS=1
MOV R7,#08H
MOV DPH,#00000011B
LOOP0: CLR P1.7 ;CLK=0
MOV A,DPH
RLC A
MOV DPH,A
MOV P1.6,C ;DI=C
NOP
SETB P1.7 ;CLK=1
DJNZ R7,LOOP0
MOV R7,#08H
LOOP1: CLR P1.7 ;CLK=0
MOV A,DPL
RLC A
MOV DPL,A
MOV P1.6,C
NOP
SETB P1.7 ;CLK=1
DJNZ R7,LOOP1
SETB P1.5 ;准备读入单片
NOP
JB P1.5,EER ;没有前导0,转故障指示
MOV R7,#08H
LOOP2: CLR P1.7 ;CLK=0
NOP
SETB P1.7 ;DO输出1位
NOP
MOV C,P1.5
MOV A,@R0
RLC A ;C移入最低位保存
MOV @R0,A
DJNZ R7,LOOP2
CLR P3.0
SETB P2.3
SJMP $
EER: CLR P2.3
SJMP $
END
发表时间:2004年12月13日15:47:17