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

📄 i2c-a.asm

📁 汇编写的24C01 单字节I2C读写程序
💻 ASM
字号:


汇编写的24C01 单字节读写程序 
; ======================================================= 
SDA EQU P2.0 
SCL EQU P2.1 
Address EQU 08H 
I2CData EQU 09H 

ORG 0000H 

START: 
MOV SP,#60H 

MOV Address,#00H 
MOV I2CData,#55H 
CALL I2C_WRITE ;写入数据 

MOV I2CDATA,#0AAH ; 

MOV Address,#00H 
CALL I2C_READ 
MOV I2CData,A ;读出数据 
NOP 
NOP 

MAIN: 

JMP MAIN 

/*======================================================= 
写一个字节 Address地址 I2CDatata写入的数据 
=======================================================*/ 
I2C_WRITE: 
I2C_WRITE_A: 
LCALL I2C_START 
MOV A,#10100000B 
LCALL I2C_SEND8BIT 
LCALL I2C_ACK 
JC I2C_WRITE_A ;=1,表示无确认,再次发送 

MOV A,Address 
LCALL I2C_SEND8BIT 
LCALL I2C_ACK 

MOV A,I2CData 
LCALL I2C_SEND8BIT 
LCALL I2C_ACK 
LCALL I2C_STOP 
RET 

/*======================================================= 
读一个字节 Address地址 Data读出的数据 
=======================================================*/ 

I2C_READ: 
I2C_READ_A: 
LCALL I2C_START 
MOV A,#10100000B 
LCALL I2C_SEND8BIT 
LCALL I2C_ACK 
JC I2C_READ_A ;=1,表示无确认,再次发送 

MOV A,Address 
LCALL I2C_SEND8BIT 
LCALL I2C_ACK 

I2C_READ_B: 
LCALL I2C_START 
MOV A,#10100001B 
LCALL I2C_SEND8BIT 
LCALL I2C_ACK 
JC I2C_READ_B 

LCALL I2C_RECEIVE8BIT 
MOV I2CData,A 
LCALL I2C_ACK 
LCALL I2C_STOP 
RET 
;======================================================= 
;发送开始信号 
I2C_START: 
SETB SCL 
SETB SDA 
NOP 
NOP 
CLR SDA 
NOP 
NOP 
CLR SCL 
RET 
;======================================================= 
;发送结束信号 
I2C_STOP: 
CLR SDA 
NOP 
NOP 
SETB SCL 
NOP 
NOP 
SETB SDA 
RET 
;======================================================= 
;发送接收确认信号 
I2C_ACk: 
SETB SDA 
SETB SCL 
NOP 
NOP 
JB SDA,I2C_ACK0 
CLR C 
SJMP I2C_ACK_END 
I2C_ACK0: 
SETB C 
I2C_ACK_END: 
CLR SCL 
RET 
;======================================================= 
;送八位数据 
I2C_SEND8BIT: 
MOV B,#08H 
I2C_SEND8BIT_A: 
RLC A 

MOV SDA,C 
SETB SCL 
NOP 
NOP 
CLR SCL 
DJNZ B,I2C_SEND8BIT_A 
RET 
;======================================================= 
;接收八位数据 
I2C_RECEIVE8BIT: 
MOV B,#08H 
CLR A 
SETB SDA 
I2C_RECEIVE8IT_A: 
SETB SCL 
NOP 
NOP 
MOV C,SDA 
RLC A 
CLR SCL 
DJNZ B,I2C_RECEIVE8IT_A 

RET 

⌨️ 快捷键说明

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