AT89S51 AT93C66
P0.2 --------------------- CS
P0.6 --------------------- SK
P2.2 --------------------- DI
P2.6 --------------------- DO
注释:1,此连接与参考资料上的有所不同,是依据实际应用而定的,其中P2.6脚还可以
与其它外设复用,这样便可以节约内部资源,占用最少的单片机I/O口.
2,本程序是用单片机的普通I/O口来模拟串行口实现对AT93C66进行读写的.
二,子程序清单如
;**************************************************************************
;子程序说明:将一个字节的数据写入到AT93C66中指定的位置
;占用资源:R2保存写入AT93C66中的内部地址,R3保存要写的数据
;子程序调用:DEL4T,CLOCK ,SENT
;**************************************************************************
WRITE: SETB P0.2;
MOV R1 ,#09H ;送擦写允许指令
ACALL SENT ;调用模拟串行发送子程序
MOV R1,#80H
ACALL SENT
CLR P0.2 ; AT93C66 复位
ACALL DEL4T;
SETB P2.6
PDF created with pdfFactory trial version www.pdffactory.com
2
SETB P0.2 ;送擦写指令
MOV R1,#0EH
ACALL SENT
MOV A ,R2 ;送擦写地址
MOV R1,A
ACALL SENT
CLR P0.2
ACALL DEL4T
SETB P0.2
WL1: JB P2.6, WL2 ;等待擦完
SJMP WL1
WL2: CLR P0.2
ACALL DEL4T
SETB P0.2 ;送写地址指令
MOV R1, #0AH
ACALL SENT
MOV A, R2 ;送写地址
MOV R1, A
ACALL SENT
MOV A, R3 ;送写数据
MOV R1, A
ACALL SENT
CLR P0.2
ACALL DEL4T
SETB P0.2
WL3: JB P2.6, WL4 ;等待写完
SJMP WL3
WL4: CLR P0.2
ACALL DEL4T
RET
;**************************************************************************
;子程序说明:从AT93C66中指定的位置读出一个字节
;占用资源:R2保留要读的内部地址, A中存放读出的一个字节数据
;子程序调用:DEL4T,CLOCK,SENT,RECEIVE
;**************************************************************************
PDF created with pdfFactory trial version www.pdffactory.com
3
READ: SETB P0.2
MOV R1,#0CH;送读地址指令
ACALL SENT
MOV A, R2 ;送读地址
MOV R1,A
ACALL SENT
ACALL RECEIVE;调用模拟接受子程序
CLR P0.2
ACALL DEL4T
RET
;**************************************************************************
;子程序说明:延时子程序
;占用资源:无
;子程序调用:无
;**************************************************************************
DEL4T: NOP
NOP
NOP
NOP
NOP
NOP
RET
;**************************************************************************
;子程序说明:模拟时钟子程序
;占用资源:无
;子程序调用:无
;**************************************************************************
CLOCK: CLR P0.6
NOP
NOP
NOP
NOP
NOP
NOP
SETB P0.6
NOP
NOP
NOP
PDF created with pdfFactory trial version www.pdffactory.com
4
NOP
NOP
NOP
RET
;**************************************************************************
;子程序说明:模拟串行发送子程序
;占用资源: R0,R1
;子程序调用:无
;**************************************************************************
SENT: MOV R0,#08H
MOV A,R1
SD0: RLC A
JNC SD2
SETB P2.2
ACALL CLOCK
SD1: DJNZ R0,SD0
RET
SD2: CLR P2.2
ACALL CLOCK
SJMP SD1
;**************************************************************************
;子程序说明: 模拟串行接收子程序
;占用资源:R1,A(接受的一个字节的数据在A寄存器中)
;子程序调用:无
;**************************************************************************
RECEIVE: MOV R1,#08H
RE1: ACALL CLOCK
MOV C,P2.6 ;利用进位(C)位作为数据缓冲
RLC A
DJNZ R1,RE1
RET