51单片机STC89C52 iic

本文详细介绍了如何使用51单片机STC89C52进行IIC通信,涵盖了IIC协议的基础知识,STC89C52的IIC接口配置,以及实际应用中的通信步骤和常见问题解决策略。
摘要由CSDN通过智能技术生成
SCL BIT P2.1 
SDA BIT P2.0
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
MOV SP,#30H
MOV P1,#0FFH ;灭LED
MOV R6,#2 ;R6保存AT24C02内部待写地址,用于传递参数
MOV R7,#55H ;R7保存待写数据,用于传递参数
LCALL iic_Write ;调用写函数,将R7的数据写入AT24C02 R6所指地址
LCALL DELAY10MS ;延时
MOV R6,#2 ;R6保存AT24C02内部待读地址,用于给读函数传递参数
LCALL iic_Read ;调用读函数
MOV A,R7 ;将保存在R7内的读取到的数据,送给累加器
CJNE A,#55H,MAINA0  ;比较读回的数据是否跟写入的一致
MOV P1,#0FH ;数据一致高4位LED亮
SJMP $
MAINA0:
MOV P1,#0F0H ;数据不一致低4位LED亮
MAINA1:
SJMP $

iic_Write: ;IIC写函数,参数R6:地址,参数R7:数据
PUSH ACC 
CLR SCL	;START信号
SETB SDA
SETB SCL
CLR SDA
MOV A,#0A0H ;器件地址,写方向
MOV R0,#08H
IIC1:
CLR SCL ;SDA只能在SCL为低电平时可变
RLC A
JC IIC0
CLR SDA
SJMP IIC2
IIC0:
SETB SDA
IIC2:
SETB SCL ;上升沿到来,AT24C02将SDA数据锁存
DJNZ R0,IIC1
CLR SCL ;允许SDA变化,等待ACK
SETB SDA ;释放SDA,以检测ACK
JB SDA,$ ;等待ACK
SETB SCL 
MOV A,R6 ;内部地址,写方向
MOV R0,#8
IIC3:
CLR SCL
RLC A
JC IIC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值