#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;
}
|