求助!利用89C52模拟SPI协议对AT89S52的串口编程?;请各位大侠指教哪个地方出问题导致无法全片擦除?(利用89C52模拟SPI协议对AT89S52串口编程)
;P0.6连接到P1.7,P0.5连接到P1.6,P0.4连接到P1.5,RST接+5V
;晶体为11.0592M
;yuanafei@163.COM
SCK BIT P0.6
MIN BIT P0.5
MOUT BIT P0.4
ORG 0000H
MOV SP,#60H
MOV R1,#02H
MOV R2,#5EH
RESET: MOV @R1,#00H
INC R1
DJNZ R2, RESET
MOV P0, #0FFH ;把SCK,MIN,MOUT置高电平
ACALL DIMS50
ACALL DIMS50
;主程序///////////////////////////////////////
MAIN: ACALL PROGRAM ;允许擦写
ACALL DIMS10 ;延时10毫秒
ACALL ERASE ;全片擦除
ACALL DIMS50 ;延时50毫秒
ACALL DIMS50
SJMP $
;/////////////////////////////////////////////
WBYTE: CLR C
MOV B, #08H ;移位8次
W1: RRC A ;低位在前,高位在后
MOV MOUT, C ;由P0.4进入AT89S52的P1.5
CLR SCK
NOP
NOP
NOP
SETB SCK ;上升沿采样数据
DJNZ B, W1
ACALL DIMS1 ;一个字节后延时1毫秒
ACALL DIMS1 ;进入内部定时写
RET
;////////////////////////////////////////////////////
PROGRAM:MOV A, #0ACH ;允许擦写
ACALL WBYTE
MOV A, #53H
ACALL WBYTE
MOV A, #00H
ACALL WBYTE
MOV A, #00H
ACALL WBYTE
ACALL DIMS10
RET
;////////////////////////////////////////////////////
ERASE: MOV A, #0ACH ;全片擦除
ACALL WBYTE
MOV A, #80H
ACALL WBYTE
MOV A, #00H
ACALL WBYTE
MOV A, #00H
ACALL WBYTE
ACALL DIMS10
ACALL DIMS50
RET
;////////////////////////////////////////////////////
WPAGE: MOV A, #50H ;
ACALL WBYTE
MOV A, #00H
ACALL WBYTE
MOV R0, #00H
MOV R2, #00H
MOV DPTR, #SEGPT1
WP1: MOV A, R0
MOVC A, @A+DPTR
ACALL WBYTE
ACALL DIMS10
INC R0
DJNZ R2, WP1
ACALL DIMS50
RET
;延时子程序/////////////////////////////////////////
DIMS1: MOV 5FH, #0FFH ;
LOOP1: NOP
NOP
DJNZ 5FH, LOOP1
RET
DIMS10: MOV 5EH, #0AH ;
LOOP2: ACALL DIMS1
DJNZ 5EH, LOOP2
RET
DIMS50: MOV 5DH, #2DH ;
LOOP3: ACALL DIMS10
DJNZ 5DH, LOOP3
RET
;/////////////////////////////////////////////////
SEGPT1: DB 75H, 81H, 60H, 79H, 02H, 7AH, 5EH, 77H, 00H, 09H,0DAH,0FBH, 75H, 90H,0FFH, 75H
DB 30H, 3FH, 75H, 31H, 06H, 75H, 32H, 5BH, 75H, 33H, 4FH, 75H, 34H, 66H, 75H, 35H
DB 6DH, 11H, 25H, 01H, 21H, 79H, 30H, 7AH, 00H, 0E7H,0F5H,80H, 0AH, 8AH, 90H, 75H
DB 37H, 0E6H,00H, 00H,0D5H, 37H, 0FBH,53H, 90H, 0F0H,09H, 0B9H,36H, 0EBH, 22H,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
END