微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > i2c问题,高手进来看一下

i2c问题,高手进来看一下

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay()
{;;}
void delay1ms(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
       for(y=110;y>0;y--);
}
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=0;
  scl=1;
  delay();
  while((sda==1)&&(i<250))i++;
  scl=0;
  delay();
}
void init()
{  scl=1;
   delay();
   sda=1;
   delay();
   
}
void writebyte(uchar date)
{
  uchar i,temp;
  temp=date;
  for(i=0;i<8;i++)
  {
    temp=temp<<1;
        scl=0;
        delay();
        sda=CY;
        delay();
        scl=1;
        delay();
  }
  scl=0;
  delay();
  sda=1;
  delay();
}
uchar readbyte()
{
  uchar i,k;
  scl=0;
  dalay();
  sda=1;
  delay();
  for(i=0;i<8;i++)
  {
   scl=1;
   delay();
   k=(k<<1)|sda;
   scl=0;
   delay();  
  }
  delay();
  return k;
}

void main()
{
  init();
  start();
  writebyte(0xa0);
  respons();
  writebyte(3);
  respons();
  writebyte(0xaa);
  respons();
   stop();

   delay1ms(200);
   start();
   writebyte(0xa0);
   respons();
   writebyte(3);
   respons();
   start();
   writebyte(0xa1);
   respons();
   a=readbyte();
   stop();
   P1=a;
   while(1);
}
用的郭天祥的板子,对着书找了几遍,实在找不出问题,i2c传送和读取,通过流水灯是否符合来验证。希望帮下忙

你这是读取哪种芯片的程序?我先说一下,while(1)那儿由于程序执行一次就停在那儿了,所以即使读出来数据,也是第一次写进去的数据,如果读的是时钟芯片的话,时间就会不走。你可能读的是EEPROM芯片

是eeprom,我就让流水灯第一个亮就达到目的了,但是,不行,也不知道哪里错了,程序看了几遍了。

问题已解决,小事。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top