实验20
93c46 演示程序
?????
93c46是1k位串行EEPROM储存器。
每一个储存器都可以通过DI/DO引脚写入或读出。它的存储容量为1024位,内部为128×8位或64×16位。93C46为串行三线SPI操作芯片,在时钟时序的同步下接收数据口的指令。指令码为9位十进制码,具有7个指令,读、擦写使能、擦除、写、全擦、全写及擦除禁止。该芯片擦写时间快,有擦写使能保护,可靠性高,擦写次数可达100万次。
引脚说明:
?? 
相关原理:

程序运行照片:

接线方法:
1、用一个4PIN数据排线一端插入CPU部分JP53(P3口)的P3.4,P3.5,P3.6,P3.7。另外一端插入93C46部分的输入端JP46.
2、用一条8PIN的数据排线把CPU部份的P2口(JP52)接到八路指示灯部份的JP32。
此程序先把8路跑马灯的数据写入93C46, 然后读出送P2口显示。 运行程序可以观察到8路跑马灯。
为证明93C46的作用, 可以拔下93c46的数据线, 再次运行程序, 则没有跑马灯。
程序流程图:

汇编语言参考程序:
?READ EQU 0 ;读93C46
WRITE EQU 2 ;写入93C46
EWEN EQU 4 ;93C46写入使能
EWDS EQU 6 ;93C46写入禁止
CS BIT P3.7 ;93C46 CS
CLK BIT P3.6 ;93C46 CLK
DI BIT P3.5 ;93C46 DI
DO BIT P3.4 ;93C46 DO
ADR46 EQU 20H
ORG 0080H
START0: MOV 21H,#00H ;取地址码
MOV 22H,#08H ;8组8个码
MOV P3,#10H
MOV ADR46,#00H ;93C46地址00H
START: MOV A,#EWEN ;写入使能
CALL TO9346
MOV A ,21H ;载入取码指针
MOV DPTR,#TABLE ;至TABLE取码
MOVC A,@A+DPTR
MOV R4,A ;存入"写入寄存器"
MOV A,#WRITE ;写入数据
CALL TO9346
MOV A,#EWDS ;写禁止
CALL TO9346
INC 21H ;取下一个码
INC ADR46 ;下一个地址
CALL DELAY1
DJNZ 22H,START
MOV R0,#30H ;存入8051的RAM 地址
MOV ADR46,#00H ;93C46 :00地址
MOV 22H,#08H ; 93C46 8个地址8个码
A1: MOV A,#READ ;读(地址)的数据
CALL TO9346
MOV A,R4 ;93C46输出的数据载入ACC
MOV @R0,A
INC ADR46 ;读下一个地址
INC R0 ;下一个RAM
DJNZ 22H,A1
A2: MOV 22H,#08H
MOV R0,#30H
OUTPUT:MOV A,@R0
MOV P2,A ;输出至P2
CALL DELAY1 ;
INC R0
DJNZ 22H,OUTPUT
JMP A2
TO9346: SETB CS ;93C46 CS=1
SETB DI ;DI=1
SETB CLK ;CLK=1
CALL DELAY ;启动位
CLR CLK ;CLK=0
CALL DELAY
MOV DPTR,#JPTBL46
JMP @A+DPTR ;依ACC值跳至相关地址
JPTBL46: AJMP SREAD ;读
AJMP SWRITE ;写
AJMP SEWEN ;写使能
AJMP SEWDS ;写禁止
SREAD:
MOV A,#80H ;送操作码10
CALL SDATA
MOV A,ADR46 ;载入93C46地址
CALL SADR ;写入7位地址(DI)
CALL RDT46 ;读出数据(DO),存入3CH
MOV R4,A
JMP EX9346
SWRITE:
MOV A,#40H ;送操作码01
CALL SDATA
MOV A,ADR46 ;载入93C46地址
CALL SADR ;写入7位地址
MOV A,R4 ;写入(3CH)数据
CALL SDT46
JMP EX9346
SEWEN:
CLR A ;送操作码00
CALL SDATA
MOV A,#60H ;写使能操作码11XXXXX
CALL SADR
JMP EX9346
SEWDS:
CLR A ;送操作码00
CALL SDATA
CLR A ;写7位禁止操作码000XXXX
CALL SADR
EX9346: CLR CS ;CS=0
RET
SADR:
CLR C
RLC A
MOV R3,#7
JMP SD1
SDATA:
MOV R3,#2
JMP SD1
SDT46: MOV R3,#8 ;写入8位数据
SD1: RLC A ;
MOV DI,C
SETB CLK
CALL DELAY
CLR CLK
CALL DELAY
DJNZ R3,SD1
RET
RDT46: MOV R3,#8 ;读出8位数据
RD1: SETB CLK
CALL DELAY
CLR CLK
CALL DELAY
MOV C,DO
RLC A
DJNZ R3,RD1
RET
DELAY: MOV R7,#0FH
DJNZ R7,$
RET
DELAY1: MOV R4,#20
D1: MOV R5,#20
D2: MOV R6,#248
DJNZ R6,$
DJNZ R5,D2
DJNZ R4,D1
RET
TABLE : DB 0FEH ,0FDH ,0FBH, 0F7H ;广告一个灯左移
DB 0EFH ,0DFH ,0BFH, 7FH ;
END |