sbit scl=P3^0;
sbit sda=P3^1;
void i2c_start(void);
void i2c_write(unsigned char dat);
void i2c_ack(void);
void i2c_stop(void);
unsigned char i2c_read(void);
void i2c_noack(void);
void i2c_device_write(unsigned char sa, unsigned char addr,unsigned char dat);
unsigned char i2c_device_read(unsigned char sa,unsigned char dat);
///////////////////////////////////////////////////////
void i2c_start(void)
{
scl=1;
sda=1;
sda=0;
}
void i2c_write(unsigned char dat)
{
unsigned char i;
for(i=0;i<=7;i++)
{
scl=0;
sda=(dat&(0x80>>i))?1:0;
scl=1;
}
}
void i2c_ack(void)
{
scl=0;
sda=1;
scl=1;
scl=0;
}
void i2c_stop(void)
{
scl=0;
sda=0;
scl=1;
sda=1;
}
void i2c_device_write(unsigned char sa,unsigned char addr,unsigned char dat)
{
i2c_start();
i2c_write(sa);
i2c_ack();
i2c_write(addr);
i2c_ack();
i2c_write(dat);
i2c_ack();
i2c_stop();
//delay_ms(9);
}
unsigned char i2c_read(void)
{
unsigned char buff=0x00,i;
sda=1;
for(i=0;i<=7;i++)
{
scl=1;
if(sda)
buff=buff|(0x80>>i);
scl=0;
}
return buff;
}
void i2c_noack()
{
scl=0;
sda=1;
scl=1;
}
unsigned char i2c_device_read(unsigned char sa,unsigned char addr)
{
unsigned char buff;
i2c_start();
i2c_write(sa);
i2c_ack();
i2c_write(addr);
i2c_ack();
i2c_start();
i2c_write(sa|1);
i2c_ack();
buff=i2c_read();
i2c_noack();
i2c_stop();
return buff;
}
i2cdriver.c
#include<reg51.h>
#include"i2c.h"
char t _at_ 0x30;
main()
{
i2c_device_write(0xa0,0x00,'U');
t=i2c_device_read(0xa0,0x00);
while(1);
}
Saturday, 6 December 2014
Embedded C program to implement i2c protocol in 8051
Posted by Madan
Posted on 23:53





