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

📄 子函数化实现特定地址写读数据.c

📁 51单片机的IIC总线先测试程序
💻 C
字号:
/*先将数据0x01通过IIC写入到AT24C02中,
  再将其从AT24C02中读出来付给P1口,期间
  需要编写延时、写数据、读数据、应答、起始、
  结束这几个子函数*/
#include<reg52.h>
#define uchar unsigned char
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay1()//短延时,用于读写操作模块内的延时。
{ ; ; }
void delay2(uchar z)//长延时用于读写模块间的延时。
{
  uchar x,y;
  for(x=z;x>0;x--)
     for(y=100;y>0;y--);
}
void start()//根据时序图,在scl=1期间,sda有一个负跳变
{
  sda=1;
  delay1();
  scl=1;
  delay1();
  sda=0;
  delay1();
}
void response()//应答信号,在第九个数据后scl=1期间sda为0时即为应答。
{
  uchar i;
  scl=1;
  delay1();
  while((sda==1)&&(i<250))i++;//这条的含义是:在scl=1期间sda=0即有应答了退出执行那个下面的程序,或者是老没有应答,但是经过一点时间后认为受到了(用i控制)也就算有了应答了。
  scl=0;
  delay1(); 
}
void initial()
{
  sda=1;
  scl=1;
}
void write_byte(uchar dat)
{
  uchar i,j;
  j=dat;

  for(i=0;i<8;i++)
     {
       j=j<<1;//将dat值左移一位,最高为进入PSW的CY位。
       scl=0;
       delay1();
       sda=CY;
       delay1();
       scl=1;//写入一位数据
       delay1();
 //    scl=0;
 //    delay1();
     }
   scl=0;
   delay1();
   sda=1;//释放总线,以读取应答信号
   delay1();  
}
uchar read_byte()
{
   uchar i,j,k;
   scl=0;
   delay1();
   sda=1;
   delay1();
   for(i=0;i<8;i++)
      {
         scl=1;
         delay1();
         j=sda;//将总线的一位数据给j
         k=(k<<1)|j;
         delay1();
         scl=0;
         delay1();
      }
   return k;
}
void stop()
{
  sda=0;
  delay1();
  scl=1;
  delay1();
  sda=1;
  delay1();
}
void write_add(uchar adds,uchar date)
{
   start();
   write_byte(0xa0);//写器件地址,高四位1010,第四位全0.
   response();
   write_byte(adds);//写器件内部数据地址
   response();
   write_byte(date);
   response();
   stop();
}
uchar read_add(uchar adds1)
{
   start();
   write_byte(0xa0);//写器件地址,高四位1010,第四位全0.
   response();
   write_byte(adds1);//写器件内部数据地址
   response();
   start();
   write_byte(0xa1);
   response();
   a=read_byte();
   stop();
   return a;
}
void main()
{
   initial();
   write_add(23,0xaa);
   delay2(100);
   P1=read_add(23);
   while(1);
}

⌨️ 快捷键说明

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