⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 93c46asm.asm

📁 93c46 ASM测试小程序 包括读写擦 程序已经验证过
💻 ASM
字号:
;
;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 00H
START0:
		MOV P3,#10H	 ;93c46 CS=1
		MOV ADR46,#00H ;93C46地址00H

START: 	MOV 21H,#00H ; 取地址码
		MOV 22H,#08H ; 8组8个码
;-----------------------------------------------------------------	
		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 地址   RAM区域30~7FH
		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: 					 ;0.1ms 11.0592MHz
		MOV R7,#0FH
		DJNZ R7,$
		RET
DELAY1: 				 ;0.2秒延时	 11.0592MHz
		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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -