I2C总结及RX8025驱动编写.docx

上传人:b****9 文档编号:26002920 上传时间:2023-06-17 格式:DOCX 页数:9 大小:305.15KB
下载 相关 举报
I2C总结及RX8025驱动编写.docx_第1页
第1页 / 共9页
I2C总结及RX8025驱动编写.docx_第2页
第2页 / 共9页
I2C总结及RX8025驱动编写.docx_第3页
第3页 / 共9页
I2C总结及RX8025驱动编写.docx_第4页
第4页 / 共9页
I2C总结及RX8025驱动编写.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

I2C总结及RX8025驱动编写.docx

《I2C总结及RX8025驱动编写.docx》由会员分享,可在线阅读,更多相关《I2C总结及RX8025驱动编写.docx(9页珍藏版)》请在冰豆网上搜索。

I2C总结及RX8025驱动编写.docx

I2C总结及RX8025驱动编写

一、I2C

1.I2C概要

I2C总线由SDA和SCL构成的2线式双向通信,通过组合这2个信号,进行通信的开始/停止/数据传送/应答等接收信号。

非通信时:

SDA、SCL都保持高电平。

通信的开始和结束通过SCL处于高电平,切上升或者下降SDA来控制。

数据的传送及发送信号时的SDA线上的数据变更在SCL线低电平区间进行,接收信号侧在SCL线处于高电平区间进行读取数据,任何情况下,都在SCL线的每一计时器脉冲以1bit逐步进行。

I2C总线的器件没有通常的逻辑器件所具有的芯片选择引脚,代之以对的是器件分配从地址,当接收器的从地质与选择从地址一致时,开始通信。

2.I2C通信的开始和停止

3.I2C通信的数据传送

4.I2C确认应答

5.I2C从地址

 

6、I2C的写数据顺序格式

7、I2C的读数据顺序格式

注:

RX8025官方手册中是错误的,经过测试,读顺序应该为上图。

二、RX8025AC驱动

#include"myiic.h"

#include"delay.h"

voidDelayus(u16us)

{

u16i;

for(i=0;i

__nop();

}

voidIIC_Start(void)

{

SDA_OUT();//sdaÏßÊä³ö

SCL_1

SDA_1

Delayus(10);

SDA_0

Delayus(10);

SCL_0

Delayus(10);

}

voidIIC_Stop(void)

{

u8i;

SDA_OUT();SDA_0

Delayus(10);

SCL_1

Delayus(10);

SDA_1

for(i=0;i<5;i++)

{

Delayus(10);

}

}

u8IIC_Wait_Ack(void)

{

u8ucErrTime=0;

SDA_IN();//SDAÉèÖÃΪÊäÈë

Delayus(10);

Delayus(10);

while(READ_SDA)

{

ucErrTime++;

if(ucErrTime>250)

{

IIC_Stop();

return1;

}

}

SCL_0//ʱÖÓÊä³ö0

return0;

}

voidIIC_Ack(void)

{

SDA_OUT();

SDA_0;

Delayus(10);

SCL_1

Delayus(10);

SCL_0

Delayus(10);

}

voidIIC_NAck(void)

{

SDA_OUT();

SDA_1;

Delayus(10);

SCL_1

Delayus(10);

SCL_0

Delayus(10);

}

voidIIC_Send_Byte(u8txd)

{

u8i;

SDA_OUT();

for(i=0;i<8;i++)

{

if(txd&0x80)SDA_1

elseSDA_0

txd<<=1;

Delayus(10);

SCL_1

Delayus(10);

SCL_0

}

Delayus(10);

SCL_1

Delayus(10);

SCL_0

}

u8IIC_Read_Byte(unsignedcharack)

{

u8i,receive=0;

SDA_IN();//SDAÉèÖÃΪÊäÈë

for(i=0;i<8;i++)

{

SCL_1

Delayus(10);

receive<<=1;

if(READ_SDA)receive|=0x01;

SCL_0

Delayus(10);

}

SDA_OUT();

returnreceive;

}

 

voidR8025AC_Read(u8sadd,u8*buf,u8len)

{

u8i;

IIC_Start();

IIC_Send_Byte(0x64);

IIC_Send_Byte(sadd<<4|0x01);

IIC_Start();

IIC_Send_Byte(0x65);

for(i=0;i

{

buf[i]=IIC_Read_Byte

(1);

IIC_Ack();

}

buf[i]=IIC_Read_Byte(0);

IIC_NAck();

IIC_Stop();

}

voidR8025AC_Write(u8sadd,u8*buf,u8len)

{

u8i;

IIC_Start();

IIC_Send_Byte(0X64);

IIC_Send_Byte(sadd<<4);

for(i=0;i

{

IIC_Send_Byte(buf[i]);

}

IIC_Stop();

}

特别说明:

RX8025严格意义上是不需要初始化和“软启动”的,除非你需要设定RX8025的闹钟、12/24小时格式、初试时间。

一旦给RX8025上电,它就自动跑起来了。

只需要读它的寄存器就可以得到时间参数了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1