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

📄 i2c.c文档.txt

📁 51单片机没有I2C接口
💻 TXT
字号:
# define  M    40
#include<reg51.h>
      bit ack=1;
      sbit sda=P3^7;
      sbit scl=P3^5;
      sbit wp=P3^4;
    
 
void    I2C_Start()
        {
        sda=1;
        scl=1;
        sda=0;
        scl=0;
        }

void    I2C_Stop()
        {
        sda=0;
        scl=1;
        sda=1;
        }
void    I2C_Ack(bit a)
        {
        unsigned char i;
        if(a)
            sda=1;
        else
            sda=0;

        scl=1;
        i=1;
        i=2;
        scl=0;
        i=1;
        i=2;
        i=3;

        }
void SendByte(char c)
     {
      unsigned char i,j;
      ack=0;
      for( i=0;i<8;i++)
          {
           if((c<<i)&0x80)
                 sda=1;
           else
                 sda=0;
           scl=1;
           scl=0;
           }
      sda=1;
      scl=1;
      if(sda)
          ack=0;
      else
          ack=1;
      scl=0;
      }
unsigned char RecByte()
         {
          unsigned char j,i;
          unsigned char c=0;
          sda=1;
          for(i=0;i<8;i++)
              {
               scl=0;
               j=1;
               j=2;
               j=3;
               scl=1;
               j=4;
               j=5;
               c=c<<1;
               if(sda)
                  c=c+1;
               j=6;
               j=7;
              }
                  scl=0;
                  return(c);
         }
bit RecNByte(unsigned char hi,unsigned char lw,unsigned char *s, unsigned int n)
    {
     unsigned char i,j;
     I2C_Start();
     SendByte(0xa0);
     if(!ack)
     return(0);
     SendByte(hi);
     if(!ack) return(0);
     SendByte(lw);
     if(!ack) return(0);
     I2C_Start();
     SendByte(0xa1);
     if(!ack) return(0);
     for(i=0;i<n-1;i++)
         {
          *s=RecByte();
          I2C_Ack(0);
          s++;
          }
     *s=RecByte();
     I2C_Ack(1);
     I2C_Stop();
     return(1);
     }

 bit SendNByte(unsigned char hi,unsigned char lw,unsigned char *s,unsigned char n)
 {
  unsigned int i;
   I2C_Start();
   SendByte(0xa0);
   if(!ack)
      return(0);
   SendByte(hi);
   if(!ack)
     return(0);
   SendByte(lw);
   if(!ack)
      return(0);

   for(i=0;i<n;i++)
      {
       SendByte(*s);
       if(!ack)
          return(0);
       s++;
       }
  I2C_Stop();
  loop:
       I2C_Start();
       SendByte(0xa0);
       if(!ack)
          goto loop;
  return(1);
 }

main()
{
 bit ok=1;
 unsigned char buff[M]={11,12,13};
 unsigned char h;
 unsigned char l;
 unsigned char n,i;
 unsigned int j;
 //unsigned char dot[M]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
wp=0;
//ok=SendNByte(0x0,0x0,dot,M);
wp=1;
ok=RecNByte(0x0,0x0,buff,M);

while(1);

}


⌨️ 快捷键说明

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