i2c.c

来自「51单片机模拟i2c完整源代码」· C语言 代码 · 共 112 行

C
112
字号
#include<reg52.h>
#define uchar unsigned char
sbit scl=P3^3;
sbit sda=P3^4;
void delay1(uchar x)
{ 
  uchar i,j;
   for(i=x;i>0;i--)
    for(j=100;j>0;j--);

}
void delay()
{;;}
void start()    //开始
{
  sda=1;
  delay();
  scl=1;
  delay();
  sda=0;
  delay();
}
void stop()     //停止
{
  sda=0;
  delay();
  scl=1;
  delay();
  sda=1;
  delay();
}
void respons()  //应答
{
  uchar i;
  scl=1;
  while(sda==1&&i<250)
    i++;
  scl=0;
  delay();
}
void init()
{
scl=1;
sda=1;
}
void write_byte(uchar date)  //写一个字节
{
   uchar temp,j;
   temp=date;
   
   for(j=0;j<8;j++)
     {
       temp=temp<<1;
       scl=0;
       delay();
       sda=CY;
       delay();
       scl=1;
       delay();
       ; 
     }
   scl=0;
   delay();
   sda=1;
   delay();
}
uchar read_byte()
{
  uchar i,j,k;
  scl=0;
  delay();
  sda=1;
  delay();
  for(i=0;i<8;i++)
   {
     scl=1;
     delay();
     j=sda;
     k=(k<<1)|j;
     scl=0;
     delay();
    }
    return k;
}
void main()
{
init();

start();
write_byte(0xa0);
respons();
write_byte(3);
respons();
write_byte(0xA5);
respons();
stop();

delay1(100);

start();
write_byte(0xa0);
respons();
write_byte(3);
respons();
start();
write_byte(0xa1);
respons();
P0=read_byte();

while(1);

}

⌨️ 快捷键说明

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