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

📄 24c1024.asm

📁 24c1024的读写程序
💻 ASM
字号:
;***************************************************************************************
;摘    要: 24C16的读写,并将读出的数据从串口送出,串口波特率为4800
;版    本: V1.0
;完成日期: 2008.6.15
;作    者: LANE
;***************************************************************************************
	SDA	EQU	P1.1
	SCL	EQU	P1.0
	ORG	0000H 
	AJMP	MAIN 
	ORG	0023H;串行中断入口 
	LJMP	SAR
	ORG	0030H 

MAIN:	MOV	R0,#20H
	MOV	@R0,#31H
	INC	R0
	MOV	@R0,#32H
	INC	R0
	MOV	@R0,#33H
	INC	R0
	MOV	@R0,#34H
	INC	R0
	MOV	@R0,#35H
	INC	R0
	MOV	@R0,#36H
	INC	R0
	MOV	@R0,#37H
	INC	R0
	MOV	@R0,#38H

	LCALL	SCINIT
	MOV	R0,#30H
	CJNE	@R0,#52H,$

	MOV	R0,#255
	MOV	R1,#20H		;从20H开始写入8个字符到E2PROM的30H开始的单元
	MOV	R2,#00H
WRITE:	LCALL	C2416_W	
	INC	R1
	INC	R2
	CJNE	R1,#28H,WINIT
	MOV	R1,#20H
WINIT:	DJNZ	R0,WRITE
	MOV	R1,#27H
	MOV	R2,#255
	LCALL	C2416_W
	CJNE	A,#53H,$

LOOP:	MOV	R0,#9
	MOV	R1,#30H		;将读取的数据存到单片机的30H开始的单元
	MOV	R2,#248
READ:	LCALL	C2416_R
	INC	R1
	INC	R2
	DJNZ	R0,READ

	CJNE	A,#54H,$
	MOV	R0,#10
	MOV	R1,#30H
SLOOP:	MOV	A,@R1
	LCALL	SEND
	LCALL	DELAY
	INC	R1
	DJNZ	R0,SLOOP
	MOV	A,R2
	LCALL	SEND
	AJMP	LOOP
;----------------------------------------------------------
;摘要:24C16写子程序
;参数:R2为写入E2PROM的地址,R1为数据在单片机中的地址
;----------------------------------------------------------
C2416_W:       
	LCALL	START		;启动
	MOV	A,#0A0H		;写控制字
	LCALL	BYTE_W		;调用字节写
	LCALL	ACK		;调用应答
	MOV	A,R2		;写入E2PROM单元地址 
	LCALL	BYTE_W
	LCALL	ACK
	MOV	A,@R1		;写数据
	LCALL	BYTE_W
	LCALL	ACK
	LCALL	STOP
	LCALL	DELAY	 
	RET
;----------------------------------------------------------
;摘要:24C16读子程序,
;参数:从R2单元读取数据,R1为读出的数据存在单片机中的地址
;----------------------------------------------------------	 
C2416_R:
	LCALL	START
	MOV	A,#0A0H        
	LCALL	BYTE_W
	LCALL	ACK       
	MOV	A,R2		;从E2PROM的R2单元的读取数据
	LCALL	BYTE_W
	LCALL	ACK
	LCALL	START
	MOV	A,#0A1H 	;DEVICE ADDRESS WORD
	LCALL	BYTE_W
	LCALL	ACK
	LCALL	BYTE_R
	MOV	@R1,A
	LCALL	MNACK
	LCALL	STOP
	RET
;----------------------------------------------------------
;串口初始化
;----------------------------------------------------------
SCINIT:
	MOV	TMOD,#20H	;设置定时器 T1 方式 2 
	MOV	PCON,#00H	;使 SMOD 为 0 
	MOV	TL1,#0FAH	;波特率为 4800b/s 
	MOV	TH1,#0FAH	;8位重装值	
	SETB	EA		;开全局中断 
	CLR	ET1		;关 T1 中断 
	SETB	ES		;开串行中断 
	SETB	TR1		;开 T1 定时 
	MOV	SCON,#50H	;串行方式 1 ,允许接收
	RET
;------------------------------------------------
;串口中断收子程序
;------------------------------------------------
SAR:	MOV	A,SBUF		;接收数据 
	CLR	RI 
	MOV	@R0,A
SCIEND:	RETI
;----------------------------------------------------------
;串口发数据
;----------------------------------------------------------
SEND:	CLR	ES	
	MOV	SBUF,A
	JNB	TI,$
	CLR	TI
	RET
;----------------------------------------------------------
;字节读子程序
;----------------------------------------------------------
BYTE_R:	MOV     R3,#08H
	CLR     SCL
	LCALL   WAIT
BIT_R:	SETB    SCL
	LCALL   WAIT
	MOV     C,SDA
	LCALL   WAIT
	CLR     SCL
	LCALL   WAIT
	RLC     A
	DJNZ    R3,BIT_R
	CLR     SDA
	LCALL   WAIT
	LCALL   STOP
	RET  
;----------------------------------------------------------
;字节写子程序
;----------------------------------------------------------
BYTE_W:	MOV     R3,#08H
BIT_W:	RLC     A
	MOV     SDA,C
	LCALL   WAIT
	SETB    SCL
	LCALL   WAIT
	CLR     SCL
	LCALL   WAIT
	DJNZ    R3,BIT_W  
	RET 
;----------------------------------------------------------
;启动子程序
;----------------------------------------------------------
START:	SETB    SDA	;启动子程序
	LCALL   WAIT
	CLR     SCL
	LCALL   WAIT
	SETB    SCL
	LCALL   WAIT
	CLR     SDA
	LCALL   WAIT
	CLR     SCL
	LCALL   WAIT
	RET
;----------------------------------------------------------
;停止子程序
;----------------------------------------------------------
STOP:	CLR     SDA
	LCALL   WAIT
	SETB    SCL
	LCALL   WAIT
	SETB    SDA
	LCALL   WAIT
	CLR     SCL
	LCALL   WAIT
	CLR     SDA
	RET
;----------------------------------------------------------
;时钟脉冲信号子程序
;----------------------------------------------------------
ACK:	SETB    SCL
	LCALL   WAIT
	CLR     SCL
	LCALL   WAIT
	RET
;----------------------------------------------------------
;发送应答信号子程序
;----------------------------------------------------------
MACK:	CLR	SDA
	NOP
	NOP
	SETB	SCL
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	NOP
	NOP
	SETB	SDA
	RET
;----------------------------------------------------------
;发送非应答信号子程序
;----------------------------------------------------------
MNACK:	SETB	SDA
	NOP
	NOP
	SETB	SCL 
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR	SCL
	NOP
	NOP
	CLR	SDA
	RET
;----------------------------------------------------------
;延时4.7uS子程序
;----------------------------------------------------------
WAIT:	NOP 
	NOP
	NOP
	NOP 
	NOP       
	RET
;----------------------------------------------------------
;延时程序
;----------------------------------------------------------
DELAY:	MOV	R7,#0F0H 
	DJNZ	R7,$
	MOV	R7,#0C0H
	DJNZ	R7,$
	RET

	END

⌨️ 快捷键说明

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