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