标题: 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 |