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

📄 24c16.asm

📁 达盛单片机试验箱
💻 ASM
字号:
;AT24C16读写程序
A_SDA			BIT		P1.1
A_SCL			BIT		P1.0
A_ADDR			EQU		55H		
A_DATA			EQU		77H

				ORG		0000H
				
				AJMP	MAIN
;				
;***************************************************************
;				/*主程序*/									   *
;***************************************************************
;	
				ORG		0030H
				
MAIN:			CALL	A_WRITE
				CALL	A_READ			;不等送0
MAIN1:			MOV		R0,A
				CALL	DISP
				CALL	DELAY
				CALL	DELAY			;显示
				AJMP	$

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
;				
;***************************************************************	
;				/*写数据到指定的地址中*/					   *
;***************************************************************
;
A_WRITE:		SETB	A_SCL
				SETB	A_SDA
				CLR		A_SDA			;开始信号,启动AT24C16
				MOV		A,#0A0H			;送控制字:写
				CALL	A_SEND			;调用发送字节子程序	
				MOV		A,#A_ADDR		;送片内字节地址
				CALL	A_SEND
				MOV		A,#A_DATA		;送数据	
				CALL	A_SEND
				CLR		A_SDA			;停止信号
				NOP
				NOP
				SETB	A_SCL
				NOP
				NOP
				SETB	A_SDA
				CALL	DELAY
				RET
;
;***************************************************************
;				/*从指定的地址中读出数据*/					   *
;***************************************************************			
;
A_READ: 		SETB	A_SCL
				SETB	A_SDA
				CLR		A_SDA			;开始信号,启动AT24C16
				MOV		A,#0A0H			;送控制字:写
				CALL	A_SEND			;调用发送字节子程序	
				MOV		A,#A_ADDR		;指定地址
				CALL	A_SEND
				SETB	A_SCL
				SETB	A_SDA
				CLR		A_SDA
				MOV		A,#0A1H			;送控制字:读
				CALL	A_SEND
				CALL	A_RECEIVE		;接收数据
				CLR		A_SDA
				NOP
				NOP
				SETB	A_SCL
				NOP
				NOP
				SETB	A_SDA
				RET
;
;***************************************************************
;				/*字节发送子程序*/							   *
;***************************************************************
;	
A_SEND:			MOV		R0,#08H
A_SEND1:		CLR		A_SCL
				RLC		A
				MOV		A_SDA,C
				NOP
				SETB	A_SCL
				NOP
				NOP
				NOP
				DJNZ	R0,A_SEND1
				CLR		A_SCL			;第9个脉冲准备取应答位
				NOP
				NOP
				NOP
				SETB	A_SCL
A_LOOP: 		MOV		C,A_SDA
				JC		A_LOOP			;应答到否
				CLR		A_SCL
				RET
;
;***************************************************************
;				/*字节接收子程序*/							   *
;***************************************************************
;		
A_RECEIVE:		MOV	R0,#08H
A_REC:			SETB	A_SCL
				NOP
				NOP
				MOV	C,A_SDA
				RLC	A
				CLR	A_SCL
				NOP
				NOP
				DJNZ	R0,A_REC
				SETB	A_SDA			;最后一个字节SDA置1
				NOP
				NOP
				SETB	A_SCL			;第9个脉冲
				NOP
				NOP
				CLR	A_SCL		
				RET
;
;***************************************************************
;				/*延时子程序*/								   *
;***************************************************************	
;
DELAY:			MOV		R6,#10			;延时
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 + -