93AA46控制子程序
一、93AA46与单片机的接口电路
VCC
AT89C2051
93AA46
P1.0 CS
P1.1 DI
P1.2 CLK
P1.3 DO
P1.4 ORG
93AA46在ORG=1(´16结构)时的命令集
|
命 令 |
S |
命令码 |
地 址 |
DI |
DO |
|
读 READ |
1 |
10 |
A5A4A3A2A1A0 |
— |
D15~D0 |
|
擦写使能 EWEN |
1 |
00 |
1 1 X X X X |
— |
高阻 |
|
擦除 ERASE |
1 |
11 |
A5A4A3A2A1A0 |
— |
RDY/BSY |
|
片擦除 ERAL |
1 |
00 |
1 0 X X X X |
— |
RDY/BSY |
|
写 WRITE |
1 |
01 |
A5A4A3A2A1A0 |
D15~D0 |
RDY/BSY |
|
片写 WRAL |
1 |
00 |
0 1 X X X X |
D15~D0 |
RDY/BSY |
|
擦写禁止 EWDS |
1 |
00 |
0 0 X X X X |
— |
高阻 |
二、控制子程序清单
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; 1、RD_DB 读16位数据子程序
; 2、WD_DB 写16位数据子程序
: 3、WR_B 送命令及地址子程序
; 4、RD 读16位数据子程序
; 5、EWDS 擦写禁止子程序
; 6、EREN 擦写使能子程序
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;I/O口定义
CS EQU P1.0
DI EQU P1.1
DO EQU P1.3
CLK EQU P1.2
OG EQU P1.4
;读16位数据子程序,待读出数据地址在R3中,读出的16位数据存在20H、
;21H中。
RD_DB: CLR CS ;复位93AA46
SETB CS
CLR CLK
SETB OG ;选´16数据结构
RD_DB1: JB DO,RD_DB1 ;检查93AA46是否正在进行写操作
MOV R7,#20H ;数据存放首址送R7
MOV A,R3 ;将待读出数据地址送A累加器(低6位)
ORL A,#80H ;READ命令码送A累加器高2位
LCALL WR_B ;送命令及地址
LCALL RD ;读16位数据并送20H、21H中
CLR CS
SETB CS
RET
WR_B: SETB DI ;送起始位
SETB CLK
CLR CLK
WR_B1: MOV R0,#08H ;送命令及地址
WR_B2: RLC A
MOV DI,C
SETB CLK
CLR CLK
DJNZ R0,WR_B2
RET
RD: MOV R1,#02H ;读16位数据
RD1: MOV R0,#08H
RD2: SETB CLK
CLR CLK
MOV C,DO
RLC A
DJNZ R0,RD2
MOV @R7,A
INC R7
DJNZ R1,RD1
RET
;写16位数据子程序。待写入数据地址在R3中,写入的16位数据存在20H、]
;21H中。F0为写成功与否标志,F0=0,写成功;F0=1,写失败。
WR_DB: CLR CS ;复位93AA46
SETB CS
CLR CLK
SETB OG ;选´16数据结构
CLR F0
JNB DO,WR_DB1 ;DO=0,93AA46准备好
SETB F0 ;DO=1,1®F0后返回
RET
WR_DB1:LCALL EWEN ;送擦写使能命令
MOV A,R3 ;将待写入数据地址送A累加器(低6位)
ORL A,#40H ;送写命令及地址
LCALL WR_B
MOV R7,#20H
MOV A,@R7 ;写数据(16位)
LCALL WR_B1
INC R7
MOV A,@R7
LCALL WR_B1
CLR CS ;启动写周期
SETB CS
RET
;擦写禁止子程序
EWDS: CLR CS
SETB CS
MOV A,#00H ;送擦写禁止命令
LCALL WR_B
CLR CS
SETB CS
RET
;擦写使能子程序
EREN: CLR CS
SETB CS
MOV A,#30H ;送擦写使能命令
LCALL WR_B
CLR CS
SETB CS
RET