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

📄 93c46.asm

📁 达盛单片机试验箱
💻 ASM
字号:
;MICROWIRE 总线读写操作
;AT93C46
F_DI			BIT		P1.0
F_DO			BIT		P1.1
F_SK			BIT		P1.2
F_CS			BIT		P1.3
BYTE_ADDR		DATA	20H				;指定地址
BYTE_DATA		DATA	21H				;指定数据
	
				ORG		0000H
				
				AJMP	MAIN
;				
;***************************************************************
;				/*主程序*/								   	   *
;***************************************************************	
;			
				ORG		0030H
				
MAIN:			MOV     P1,#11110010B
				CALL	F_ERASE			;擦除芯片
				CALL	F_EWRITE		;写使能
				MOV		R1,#80H
				MOV		BYTE_ADDR,#00H
				MOV		BYTE_DATA,#00H
MAIN1:			CALL	F_WRITE			;在指定的地址中写入数据
				INC		BYTE_ADDR
				INC		BYTE_DATA
				DJNZ	R1,MAIN1

				MOV		BYTE_ADDR,#00H							
MAIN2:			CALL	F_READ			;从指定的地址中读出数据
				MOV		R0,BYTE_DATA
				CALL	DISP			;显示
				CALL	DELAY
				INC		BYTE_ADDR
				DJNZ	R1,MAIN2				
				JMP		MAIN2

DISP:			MOV		A,R0			;低位
				ANL		A,#0FH
				ACALL	DSEND			;显示
				MOV		A,R0
				SWAP	A
				ANL		A,#0FH			;高位
				ACALL	DSEND			;显示
				RET

DSEND:			MOV		DPTR,#SGTB1
				MOVC	A,@A+DPTR		;取字符
				MOV		SBUF,A			;发送字符
				JNB		TI,$			;等待串口发送完
				CLR		TI
				RET				
;
;***************************************************************
;		/* 从指定的地址中读出数据 1 10 A6~A0* D7~D0  */        *
;***************************************************************			
;	
F_READ:			SETB	F_CS				;片选为 '1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;起始位	'1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;操作码 '1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				MOV		A,BYTE_ADDR			;地址段 'A6~A0 X'
				RLC		A
				MOV		R0,#07H
F_READ1:		RLC		A
				MOV		F_DI,C
				SETB	F_SK				;时钟
				CLR		F_SK
				DJNZ	R0,F_READ1
				CLR		F_DI
					
				MOV		R0,#08H				;数据段
F_READ2:		SETB	F_SK				;时钟
				CLR		F_SK
				MOV		C,F_DO
				RLC		A
				DJNZ	R0,F_READ2
				MOV		BYTE_DATA,A
				CLR		F_CS				;片选为 '0'
				RET
;				
;***************************************************************
;			/* 写使能 1 00 11XXXXX */						   *
;***************************************************************		
;	
F_EWRITE:		SETB	F_CS				;片选为 '1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;起始位	'1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP					
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP				
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				MOV		A,#11111111B		;地址段 '11XXXXX'
				MOV		R0,#07H
F_EWRITE1:		RLC		A
				MOV		F_DI,C
				SETB	F_SK				;时钟
				CLR		F_SK
				DJNZ	R0,F_EWRITE1
				CLR		F_DI
				CLR		F_CS				;片选为 '0'
				RET
;				
;***************************************************************				
;				/* 写禁止 1 00 00XXXXX */					   *
;***************************************************************		
;	
F_DWRITE:		SETB	F_CS				;片选为 '1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;起始位	'1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP					
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP				
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				MOV		A,#00111111B		;地址段 '00XXXXX'
				MOV		R0,#07H
F_DWRITE1:		RLC		A
				MOV		F_DI,C
				SETB	F_SK				;时钟
				CLR		F_SK
				DJNZ	R0,F_DWRITE1
				CLR		F_DI
				CLR		F_CS				;片选为 '0'
				RET
;	
;***************************************************************
;			/* 写数据到指定的地址中 1 01 A6~A0 D7~D0 */		   *
;***************************************************************		
;	
F_WRITE:		SETB	F_CS				;片选为 '1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;起始位	'1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP					
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;操作码 '1'
				NOP				
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				MOV		A,BYTE_ADDR			;地址段 'A6~A0 X'
				RLC		A
				MOV		R0,#07H
F_WRITE1:		RLC		A
				MOV		F_DI,C
				SETB	F_SK				;时钟
				CLR		F_SK
				DJNZ	R0,F_WRITE1

				MOV		A,BYTE_DATA			;数据段
				MOV		R0,#08H
F_WRITE2:		RLC		A
				MOV		F_DI,C
				SETB	F_SK				;时钟
				CLR		F_SK
				DJNZ	R0,F_WRITE2
				CLR		F_DI
				CLR		F_CS				;片选为 '0'
				setb	f_do
				setb	f_cs
				setb	f_sk
				NOP
f_write4:		JB		F_DO,F_WRITE3		;等待写完毕
				clr		f_sk
				setb	f_sk
				ajmp	f_write4
F_WRITE3:		clr		f_sk
				clr		f_cs		
				RET
;				
;***************************************************************
;				/* 擦除芯片 1 00 10XXXXX */					   *
;***************************************************************
;		
F_ERASE:		SETB	F_CS				;片选为 '1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				SETB	F_DI				;起始位	'1'
				NOP
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP					
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				CLR		F_DI				;操作码 '0'
				NOP				
				SETB	F_SK				;时钟
				CLR		F_SK
				NOP
				MOV		A,#10111111B		;地址段 '10XXXXX'
				MOV		R0,#07H
F_ERASE1:		RLC		A
				MOV		F_DI,C
				SETB	F_SK				;时钟
				CLR		F_SK
				DJNZ	R0,F_ERASE1
				CLR		F_DI
				CLR		F_CS				;片选为 '0'
				NOP
				
				setb	f_do
				setb	f_cs
				setb	f_sk
f_erase4:		JB		F_DO,F_erase3		;等待写完毕
				setb	f_sk
				clr		f_sk
				ajmp	f_erase4
F_erase3:		clr		f_cs		
				RET
				
;F_ERASE2:		JNB		F_DO,F_ERASE2		;等待擦除完毕
;				RET		
;			
;***************************************************************
;				/*延时子程序*/								   *
;***************************************************************
;
DELAY:			MOV		R6,#250			;延时
DELAY1:			MOV		R7,#250
				DJNZ	R7,$
				DJNZ	R6,DELAY1				
				RET
;				
;***************************************************************
;				/*字符编码*/								   *
;***************************************************************
;	
SGTB1:			DB	     03H         	;0
	  			DB	     9FH         	;1
	   			DB	     25H         	;2
	  			DB	     0DH         	;3
	   			DB	     99H          	;4
	   			DB	     49H          	;5
	   			DB	     41H          	;6
	  			DB	     1FH         	;7
	  			DB	     01H          	;8
	  			DB	     09H          	;9
	  			DB	     11H          	;A
	  			DB	     0C1H          	;B
	   			DB	     63H         	;C
	  			DB	     85H         	;D
	   			DB	     61H          	;E
	   			DB	     71H          	;F
	   			DB	     00H				
				END
			

	

⌨️ 快捷键说明

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