软件模拟IIC总线

时间:2013-08-08 16:42 | 来源:金桥电子网 | 点击: 次 [去老版] [去论坛] [去网店]

核心提示:


[dvnews_page]

1.向AT24C02写数据子程序IIC_write
IIC_write:
SETB P1.0 ;先使IIC总线处于空闲状态
SETB P1.1
NOP
CLR P1.1 ;启动IIC总线
NOP
CLR P1.0
MOV A,#0A0H ;AT24C02七位地址码1010000和一位写信号0
LCALL write_byte ;调用写一个字节数据子程序  
MOV A,#10H ;选中AT24C02的10H单元
LCALL write_byte
MOV A,#80H ;向AT24C02的10H单元写数据80H
LCALL write_byte
CLR P1.0 ;停止IIC总线,使其处于空闲状态
NOP
CLR P1.1
NOP
SETB P1.0
NOP
SETB P1.1
NOP
RET
-------------------------------------------------

2.从AT24C02读数据子程序IIC_read
IIC_read:
SETB P1.0 ;使IIC总线处于空闲状态
SETB P1.1
NOP
CLR P1.1 ;启动IIC总线
NOP
CLR P1.0
MOV A,#0A0H ;AT24C02七位地址码1010000和一位写信号0
LCALL write_byte
MOV A,#10H ;选中AT24C02的10H单元
LCALL write_byte
SETB P1.0 ;再次启动IIC总线
SETB P1.1
NOP
CLR P1.1
NOP
CLR P1.0
MOV A,#0A1H ;AT24C02七位地址码1010000和一位读信号1
LCALL write_byte ;调用写一个字节数据子程序
LCALL read_byte ;从AT24C02的10H单元读数据
MOV 30H,A ;保存读的一个字节数据
CLR P1.0 ;停止IIC总线,使其处于空闲状态
NOP
CLR P1.1
NOP
SETB P1.0
NOP
SETB P1.1
NOP
RET
----------------------------------------------

Read_byte:
MOV R7,#08 ;一个字节分8次读
GO 2: CLR P1.0
NOP
SETB P1.0
NOP
MOV C,P1.1
RLC A
DJNZ R7,GO2
CLR P1.0
NOP
SETB P1.1 ;第9个时钟脉冲,8031发送非应答信号,通知AT24C02停止发送数据
SETB P1.0
RET
---------------------------------------------
----------------------------------------------
Write_byte:
MOV R7,#08 ;一个字节分8次写
GO1: NOP
CLR P1.0
NOP
RLC A
MOV P1.1,C
SETB P1.0
DJNZ R7,GO1
CLR P1.0 ;发第9个时钟脉冲,准备接收应答信号
NOP
SETB P1.0
NOP
WAIT:JB P1.1,WAIT ;应答信号有效,数据传送成功就返回
CLR P1.0
RET

325759>
上一篇:没有了

下一篇:X25045的读写程序

返回金桥电子网首页

(责任编辑:JQDZW)
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片