标题: IIC存储芯片的访问 24c02 24c16 [打印本页]

作者: wangyin    时间: 2014-8-10 12:30
标题: IIC存储芯片的访问 24c02 24c16
                       
#include  
__CONFIG(0x0012);
#define scl RA3
#define sda RA4
void delay_nop()
{
   NOP();NOP();NOP();NOP();NOP();
}
void start()
{
  TRISA4=0;
  sda=1;
  delay_nop();
  scl=1;
  delay_nop();
  sda=0;
  delay_nop();
}
void stop()
{
  TRISA4=0;
  sda=0;
  delay_nop();
  scl=1;
  delay_nop();
  sda=1;
  delay_nop();
}
void respons()
{
  unsigned int i;
  TRISA4=1;
  scl=1;
  delay_nop();
  while((sda==1)&&(i<400)) i++;
  scl=0;
  delay_nop();
  
}
void init_24c16()
{
  ADCON1=0X07;
  TRISA3=0;

  TRISA4=0;
  sda=1;
  delay_nop();
  scl=1;
  delay_nop();


}
void write_byte(unsigned char date)
{
  unsigned char i,temp,temp1;
  temp=date;
  TRISA4=0;
  for(i=0;i<8;i++)
  {
scl=0;
delay_nop();
temp1=temp&0x80;
if(temp1!=0) sda=1;
else sda=0;
temp=temp<<1;
delay_nop();
scl=1;
delay_nop();  
  }
  scl=0;
  delay_nop();
  sda=1;
  delay_nop();
  
}
unsigned char read_byte()
{
  unsigned char i,k;
  TRISA4=0;
  scl=0;
  delay_nop();
  sda=1;
  delay_nop();
  for(i=0;i<8;i++)
  {
TRISA4=1;
scl=1;
delay_nop();
k=(k<<1)|sda;
scl=0;
delay_nop();  
  }
  return k;
}
void write_add(unsigned int address,unsigned chardate)
{
  unsigned char MSbyte,LSbyte;
  MSbyte=address/256;
  LSbyte=address%6;
  start();
write_byte(0xa0+(MSbyte<<1));
  respons();
  write_byte(LSbyte);
  respons();
  write_byte(date);
  respons();
  stop();

}
unsigned char read_add(unsigned int address)
{
  unsigned char date;
  unsigned char MSbyte,LSbyte;
  MSbyte=address/256;
  LSbyte=address%6;
  start();
  write_byte(0xa0+(MSbyte<<1));
  respons();
  write_byte(LSbyte);
  respons();
  start();
  write_byte(0xa1+(MSbyte<<1));
  respons();
  date=read_byte();
  stop();
  return date;
   
}



作者: k1200    时间: 2014-8-23 19:41
一看就是很专业的样子,新手只能慢慢努力了
作者: mqwu    时间: 2014-9-18 17:06
有硬件I2C不用,为什么要用软件I2C呢?硬件I2C执行效率更高, 代码更优化。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1