I2C笔记

这篇博客详细介绍了I2C总线的概念和工作原理,包括I2C的相关知识总结、C语言实现的I2C通信程序以及实用的模拟I2C程序,还提供了I2C编程接口的讲解,适合初学者和进阶者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I2C总线中文讲解,详尽通俗(一些概念):
http://wenku.baidu.com/link?url=n8aVmARYADcKwBAX5-3b9aml3nwPZh7k9R4FzREmGS8isp9UHCsQ47GiS4nZyerr4SwZLA9-4WGqWmuSEbDcx7yplDc39lGO5-8qBI9iPxq

i2c 相关知识总结(转):
http://blog.youkuaiyun.com/hygzxf/article/details/17416725

I2C通讯的C语言程序:
http://blog.sina.com.cn/s/blog_6a4482d10100yp6j.html

非常实用的模拟I2C程序:
http://wenku.baidu.com/link?url=7O6pbrlv7IcZxIhhml7VNJW1VysuQ4_k-U9qyjYjW8Cv3xSolKJ2oqAzgGv6jFU8-g2AgOmu-2KWfR-k0VNHHZP-N_ByWFw_XdD7G51A9Mu

i2c 编程接口:
http://blog.youkuaiyun.com/g_salamander/article/details/8064627

//正点原子例子:

这里写图片描述

//在AT24CXX指定地址写入一个数据
//WriteAddr  :写入数据的目的地址    
//DataToWrite:要写入的数据
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{                                                                                            
  IIC_Start();  
  if(EE_TYPE>AT24C16)  //判断容量,不同容量写法不同
    {
        IIC_Send_Byte(0XA0);        //发送写命令
        IIC_Wait_Ack();
        IIC_Send_Byte(WriteAddr>>8);//发送高地址
    }
    else
    {
        IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //正点原子中:发送器件地址0XA0
    }   
 IIC_Wait_Ack();  //等待应答信号

 IIC_Send_Byte(WriteAddr%256);   //发送低地址
 IIC_Wait_Ack();  //等待应答信号

 IIC_Send_Byte(DataToWrite);     //发送字节 
 IIC_Wait_Ack();  //等待应答信号      

 IIC_Stop();//产生一个停止条件 
 delay_ms(10);   
}

这里写代码片


//在AT24CXX指定地址读出一个数据
//ReadAddr:开始读数的地址  
//返回值  :读到的数据
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{                 
    u8 temp=0;                                                                               
  IIC_Start();  
    if(EE_TYPE>AT24C16)   //芯片为大容量的时候
    {
        IIC_Send_Byte(0XA0);       //发送写命令
        IIC_Wait_Ack();
        IIC_Send_Byte(ReadAddr>>8);//发送高地址
        IIC_Wait_Ack();      
    }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //发送器件地址0XA0,写数据    

    IIC_Wait_Ack();  //等待应答
    IIC_Send_Byte(ReadAddr%256);   //发送低地址
    IIC_Wait_Ack();   

    IIC_Start();           
    IIC_Send_Byte(0XA1);           //进入接收模式            
    IIC_Wait_Ack();  
    temp=IIC_Read_Byte(0);         
    IIC_Stop();//产生一个停止条件       
    return temp;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值