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

📄 iic.asm

📁 IIC总线EEPROMAT24C02读写程序
💻 ASM
字号:
;***********************************************************************************************************
;IIC AT24C02 读写代码
;使用说明:
;AT24C02_WRITE 写程序  参数:地址R2 数据R3
;AT24C02_READ  读程序  参数: 地址R4 数据A
;备注:检错从发的功能未实现
;							2008.4.13
;***********************************************************************************************************
		SCL	BIT	P1.0
		SDA	BIT	P1.1
		IIC_ACK	BIT	00H
;***********************************************************************************************************
;测试程序
;************************************************************************************************************
		ORG	0000H
		JMP	START
		ORG	0030H
START:		MOV	R2,#00H
		MOV	R3,#77H
		CALL	AT24C02_WRITE
		CALL	DELAY
		CALL	AT24C02_READ
		CLR	P1.3
		MOV	P0,A
		SJMP	$		
;***********************************************************************************************************
;写字节程序
;参数: 地址R2	数据R3
;***********************************************************************************************************
AT24C02_WRITE:	CALL	IIC_START
		MOV	A,#10100000B
		CALL	WRITE_CONFIRM
		MOV	A,R2
		CALL	WRITE_CONFIRM
		MOV	A,R3
		CALL	WRITE_CONFIRM
		CALL	IIC_STOP
		RET

AT24C02_READ:	CALL	IIC_START
		MOV	A,#10100000B
		CALL	WRITE_CONFIRM
		MOV	A,R4
		CALL	WRITE_CONFIRM
		CALL	IIC_START
		MOV	A,#10100001B
		CALL	WRITE_CONFIRM
		CALL	READ_BYTE
		CALL	SEND_NACK
		CALL	IIC_STOP
		RET
;***********************************************************************************************************
;读字节程序
;参数: 地址R4	数据A
;***********************************************************************************************************
READ_BYTE:	MOV	R7,#8
READ_BIT:	SETB	SDA
		SETB	SCL
		MOV	C,SDA
		RLC	A
		CLR	SCL
		DJNZ	R7,READ_BIT
		RET
;**********************************************************************************************************
;IIC启动程序
;**********************************************************************************************************
IIC_START:	SETB	SDA
		SETB	SCL
		NOP
		NOP
		NOP
		CLR	SDA
		NOP
		NOP
		NOP
		CLR	SCL
		RET
;********************************************************************************************************
;IIC停止程序
;********************************************************************************************************
IIC_STOP:	CLR	SDA
		SETB	SCL
		NOP
		NOP
		NOP
		SETB	SDA
		RET
;********************************************************************************************************
;写位程序
;********************************************************************************************************
WRITE_BYTE:	MOV	R7,#8
		CLR	C
NEXT_BIT:	RLC	A
		MOV	SDA,C
		SETB	SCL
		NOP
		NOP
		NOP
		CLR	SCL
		DJNZ	R7,NEXT_BIT
		RET
;*******************************************************************************************************
;应答程序
;*******************************************************************************************************
WRITE_CONFIRM:	CALL	WRITE_BYTE
		CALL	SEND_ACK
;		CALL	TEST_ACK
;		JNB	IIC_ACK,WRITE_CONFIRM
		RET
;*******************************************************************************************************
;测试应答信号
;备注:现未使用
;*******************************************************************************************************
TEST_ACK:	SETB	SDA
		SETB	SCL
		JB	SDA,NOT_ACK
		SETB	IIC_ACK
		RET
;******************************************************************************************************
;非应答程序
;备注:现未使用
;******************************************************************************************************
NOT_ACK:	CLR	IIC_ACK
		RET
;*******************************************************************************************************
;发送应答信号
;*******************************************************************************************************
SEND_ACK:				;IIC应答函数
		CLR	SDA
		SETB	SCL
		NOP
		NOP
		NOP
		NOP
		SETB	SDA
		CLR	SCL
		RET
;*******************************************************************************************************
;发送非应答信号
;*******************************************************************************************************
SEND_NACK:				
		SETB	SDA
		SETB	SCL
		NOP
		NOP
		NOP
		NOP
		CLR	SDA
		CLR	SCL
		RET

DELAY:		MOV	R7,#0FFH
DEL1:		MOV	R6,#0FFH
DEL2:		DJNZ	R6,DEL2
		DJNZ	R7,DEL1
		RET
END

⌨️ 快捷键说明

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