打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机I/O口模拟I2C总线通讯

 

#include       //  包含51单片机寄存器定义的头文件
#include     //包含_nop_()函数定义的头文件
#define  uchar unsigned  char
#define  uint unsigned  int
sbitSDA=P2^1;         //将串行数据总线SDA位定义在为P3.4引脚
sbitSCL=P2^0;        //将串行时钟总线SDA位定义在为P3.3引脚
void  delayms()
{
   uchar i,j;
   for(i=10;i>0;i--)
     for(j=33;j>0;j--);
}
void  delayx(uchar x)
{
   uchar i;
   for(i=x;i>0;i--)
   delayms();
}
void  delay()
{
   _nop_();
   _nop_();
   _nop_();
   _nop_();
}

void  start()
{
  SCL=1;
  SDA=1;
  delay();
  SDA=0;
  delay();
  SCL=0;
}

void  stop()
{
  SCL=1;
  SDA=0;
  delay();
  SDA=1;
  delay();
  SCL=0;
  SDA=0;
}

bit  writebyte(uchar y)
{
  uchar i;
  bit ACK;
  for(i=0;i<8;i++)
  {
   SCL=0;
   delay();
   y=y<<1;
   SDA=CY;
   _nop_();
   _nop_();
   SCL=1;
   delay();
  SCL=0;   //必须将其置低电平为下一次SDA数据传送做准备
  }
  SDA=1;
  delay();
  SCL=1;
  delay();
  ACK=SDA;
 SCL=0;  //为下面SDA改变做改变
  return  ACK;


}
uchar  readbyte()
{
   uchar i,k;
   for(i=0;i<8;i++)
   {
     SCL=1;
   delay();
  k=(k<<1)|(uchar)SDA;
   _nop_();
   _nop_();
   SCL=0;
   delay();

   }
   return k;

}

void  writeset(uchar address,uchar  dat)
{
  SCL=1;
  SDA=1;
  start();
  writebyte(0xa0);
  writebyte(address);
  writebyte(dat);
  stop();
  delayx(5);

}
uchar  read_byte( )
{
  uchar  x;
  start();
  writebyte(0xa1);
  x=readbyte();
  stop();
  return  x;

}

uchar  readset(uchar address)
{
  start();
  writebyte(0xa0);
  writebyte(address);
  return  (read_byte());

}
void  main()
{
  while(1)
  {
   SCL=1;
   SDA=1;
   writeset(0X36,0XAA);
   P1=readset(0X36);
  }
}

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机读取EEPROM(AT24C02)-Changing's Blog
I2C 串行总线的组成及工作原理
I2C 24LC02 C读写例程(PIC单片机)
AT24C02EEPROM芯片《实现对其读和写》
I2C总线读写
IIC 通讯协议
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服