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

📄 rw.asm

📁 多个仿真例子
💻 ASM
字号:
; =======================================================
;         24C01存储器I2C总线读写程序
; =======================================================
SDA	EQU	P1.1
SCL	EQU	P1.0
Address	EQU	08H
I2CData	EQU	09H 
 
	ORG	0000H 
START:	MOV	SP,#60H
       	MOV	Address,#00H
       	MOV	I2CData,#55H
       	LCALL	I2C_WRITE   	;写入数据
       	MOV	I2CDATA,#0AAH
	MOV	Address,#00H
       	LCALL	I2C_READ
       	MOV	I2CData,A      	;读出数据
       	NOP
       	NOP
	SJMP	$ 
;=======================================================
;写一个字节    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 + -