您当前的位置:五五电子网电子知识维修资料单片机-工控设备软件模拟IIC总线 正文
软件模拟IIC总线

软件模拟IIC总线

点击数:7561 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   单片机-工控设备
[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




本文关键字:软件  单片机-工控设备维修资料 - 单片机-工控设备