在使用AT45DB081遇到问题,写进去的数据和 读出来的不一样啊,谁帮我 解决一下呀,看 下是不是 程序有问题 代码如下:
P1.4--CS P1.5--MISO P1.6--MOSI P1.7--SCK
ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#5FH CLR EA ;所有中断关
MOV R0,#84H ;写BUFFER1命令 LCALL BYTE_WRITE MOV R0,#00H LCALL BYTE_WRITE MOV R0,#00H LCALL BYTE_WRITE MOV R0,#00H LCALL BYTE_WRITE MOV R0,#66H ;向BUFFER1中写如66H LCALL BYTE_WRITE
SETB P1.4 ;片选
MOV R0,#0D4H ;读BUFFER1命令 LCALL BYTE_WRITE MOV R0,#00H LCALL BYTE_WRITE MOV R0,#00H LCALL BYTE_WRITE MOV R0,#00H LCALL BYTE_WRITE
LCALL BYTE_READ ;读一BYTE
M0: MOV P1,R0 MOV P2,R0 AJMP M0
BYTE_WRITE: ;向MEMORY中写入一个字节的数据,要写入的数放在R0中 SETB P1.7 ;1.7(时钟)输出为1 CLR P1.4 ;片选 MOV R1,#08H ;置循环次数 MOV A,R0 ;输出的数据在R0中 BYTE_OUT: CLR P1.7 ;1.7(时钟)输出0 NOP NOP RLC A ;左移一位(先输出高位) MOV P1.6,C SETB P1.7 DJNZ R1,BYTE_OUT
RET ;注意:片选信号并没有在此程序中拉高
BYTE_READ: ;从MEMORY中读取一个字节的数据,并将这个数据放在R0中 SETB P1.7 ;1.7(时钟)输出为1 CLR P1.4 ;片选 MOV R1,#08H ;置循环次数 BYTE_IN: CLR P1.7 ;1.7(时钟)输出0 NOP NOP MOV C,P1.5 RLC A ;左移一位(先输出高位) SETB P1.7 DJNZ R1,BYTE_IN MOV R0,A SETB P1.7 RET ;注意:片选信号并没有在此程序中拉高
|