⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ii2c.c

📁 用C语言编写的I2C 2404 如何读写程序。
💻 C
字号:
#include "includes.h" 


sbit SDA = P1^1;
sbit SCL = P1^0;

/*启动IIc总线 */
void delay(uint8 a,uint8 b)
{
   uint8 i;
   uint8 j;
   for(i=a; i!=0; i--)
     for(j=b; j!=0; j--)
        DOG = 0x00;DOG = 0xff;
} 

 void StartIIc()
{
   SDA = 1;        //发送起始条件的数据信号
   SCL = 1;
   delay(50,10);
   _nop_();
   SDA = 0;        //发送起始信号
   _nop_();
   SCL = 0;        //准备发送或接收数据
}
/*停止IIc总线*/
 void StopIIc()
{
   SDA = 0;       //发送结束条件的数据信号
   SCL = 0;
   delay(50,10);
   _nop_();
   SCL = 1;       //结束条件建立时间大于4μs
   _nop_();
   SDA = 1;       //发送IIC总线结束信号
   _nop_();
}
/*IIC检测ACK信号子程序*/
 void IIcAck()
{
   SCL = 1;
   while(SDA);
   SDA = 0;
   delay(5,10);
   SCL = 0;
}

/*向IIC发送8BIT数据子程序*/
 void byteToIic(uint8 a)
 {
   uint8 i;
   bit j;
   SCL = 0;
   for(i=0; i<8; i++)
   {
     j = (a & 0x80);
     SDA = j;
     _nop_();
     delay(5,10);
     _nop_();
     _nop_();
     SCL = 1;
     a <<=1;
     SCL = 0;
   }
 }

 /*从IIC接收8BIT数据子程序*/
 uint8 iicToByte()
 {
   uint8 i,a,j;

   SDA = 1;
   _nop_();

   for(i=0; i<8; i++)
   {
     SCL = 1;
     j = SDA & 0x01;
     delay(5,10);
     SCL = 0;
     a = a<<1;
     a = a|j;
   }

   return (a);
 }
/****************************************
*函数名:IIcReadByte*********************
*功  能:IIC从2402的存储区读一个字节数据*
*****************************************/
uint8 IIcReadByte( uint8 addr)
{
   uint8 tempdata;
   DOG = 0x00;DOG = 0xff;
   StartIIc();                  //启动IIC总线
   _nop_();

   byteToIic(0xA0);             //写24c04的芯片地址以及确定下面执行写操作
   _nop_();
   _nop_();
   IIcAck();
   _nop_();

   byteToIic(addr);             //写对24c04操作的地址
   _nop_();
   _nop_();
   IIcAck();
   _nop_();

   StartIIc();                  //再次启动IIC总线
   _nop_();

   byteToIic(0xA1);             //写24c04的芯片地址以及确定下面执行读操作
   _nop_();
   _nop_();
   IIcAck();
   _nop_();

   tempdata = iicToByte();      //从24c04中读取数据,存入临时变量tempdata中
   _nop_();

   StopIIc();                   //停止IIC总线
  _nop_();

  return (tempdata);
}
/***************************************
*函数名:IIcWriteByte*******************
*功  能:IIC写1字节数据到2402的存储区***
****************************************/

void IIcWriteByte(uint8 addr,uint8 value)
{  
   DOG = 0x00;DOG = 0xff;
   StartIIc();                  //启动IIC总线
  _nop_();

   byteToIic(0xA0);             //写24c04的芯片地址以及确定下面执行写操作
   _nop_();
   _nop_();
   IIcAck();
   _nop_();

   byteToIic(addr);             //写对24c04操作的地址
   _nop_();
   _nop_();
   IIcAck();
   _nop_();

   byteToIic(value);            // 向24c04中写数据
   _nop_();
   _nop_();
   IIcAck();
   _nop_();

   StopIIc();                   //停止IIC总线
   _nop_();                     //写入延时
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -