93c46 演示程序 93c46是1k位串行EEPROM储存器。 每一个储存器都可以通过DI/DO引脚写入或读出。它的存储容量为1024位,内部为128×8位或64×16位。93C46为串行三线SPI操作芯片,在时钟时序的同步下接收数据口的指令。指令码为9位十进制码,具有7个指令,读、擦写使能、擦除、写、全擦、全写及擦除禁止。该芯片擦写时间快,有擦写使能保护,可靠性高,擦写次数可达100万次,以下给出了93C46与单片机的接线图,和引脚说明。
说明: 93c46的第6脚org为16/8位模式选择, XL2000套件第6脚接地,仅工作在8位模式下。 |
|
XL2000的93C46部分原理图 |
接线方法: 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的数据线, 再次运行程序, 则没有跑马灯。
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 00H 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 ;CALL RDT46 ;读出数据(DO),存入3DH ;MOV 3DH,A JMP EX9346 SWRITE: MOV A,#40H ;送操作码01 CALL SDATA MOV A,ADR46 ;载入93C46地址 CALL SADR ;写入7位地址 MOV A,R4 ;写入(3CH)数据 CALL SDT46 ;MOV A,3DH ;写入(3DH)数据 ;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 |