环境:Proteus 8.11 sp0,电路连接如下图。
程序清单是:
SCK BIT P3.0
SI BIT P3.1
SO BIT P3.2
CS BIT P3.3
ORG 00H
MOV SP,#30H
INIT:
CLR SCK
SETB SO
;发送RDID命令(9F)
CLR CS
L0:
MOV A,#9FH
MOV R0,#8
L1:
RLC A
MOV SI,C
SETB SCK
CLR SCK
DJNZ R0,L1
;读8位
L2:
CLR A
MOV R0,#8
L3:
RL A
JNB SO,L4
ORL A,#01H
L4:
SETB SCK
CLR SCK
DJNZ R0,L3
L5:
MOV P1,A
;再读8位
L6:
CLR A
MOV R0,#8
L7:
RL A
JNB SO,L8
ORL A,#01H
L8:
SETB SCK
CLR SCK
DJNZ R0,L7
L9:
MOV P2,A
;结束通信,延时后重复
L10:
SETB CS
DL:
MOV R1,#0FFH
DL0:
MOV R0,#0FFH
DJNZ R0,$
DJNZ R1,DL0
SJMP INIT
END
仿真结果图:
分析仪信号:
M45PE16手册上关于RDID的说明:
为什么出现这种情况(LED上的两个20而不是我想的2040)呢?