         #include<reg51.h>
         bit ack;
         //=========================
         unsigned char pcf8574a_id;
	unsigned char datiic1;
	unsigned char bdata datiic;
	sbit check=datiic^7;
	//=========================
	unsigned char get_data1;
	unsigned char bdata get_data;
	sbit get=get_data^0;
	//==========================
	extern unsigned char k;
	sbit scl=P3^0;
	sbit sda=P3^1;
	unsigned char dat_iic;
	extern void delay(unsigned int time);
	void iic_start(void);
	void iic_nack(void);
	void iic_function(void)
	{
 	 scl=1;                                                     
	 sda=1;    
	 ack=1;
	 iic_start();
 	k=0;
	} 
	void iic_start(void)
	{
	 scl=1;
	 sda=1;
	 delay(5);
	 sda=0;
	 delay(5);
	 scl=0; 
	 delay(1);
	}                                     	
	void iic_clock(void)
	{
	scl=1;
	delay(5);
	scl=0;

	}
	void iic_stop(void)
	{
	scl=0;
	sda=0;
	delay(5);
	scl=1;
	delay(5);
	sda=1;

	}
	void iic_writ(void)
	{
	datiic=0;
	datiic=datiic1;
	while(k<=7)
	{
	 sda=check;
	 iic_clock();
	 datiic=datiic<<1;
	 k++;
	 delay(5);
	}
	 k=0;
	 sda=1;
	delay(5);
	 scl=1;
	delay(5);
	if(!sda);//check ack
	{
	ack=0;
	}
	scl=0;
	iic_stop();
	}
	void iic_read(void)
	{
	 get_data=0;
 	while(k<=7)
 	{
   
 	 scl=1;
  	 delay(5);
 	 get=sda;
  	if(k!=7)get_data=get_data<<1;
 	 scl=0;
 	 delay(5);
 	 k++;
 	}

	 k=0;
	get_data1=get_data;
 	iic_nack();
 	iic_stop();     
	} 


	void iic_nack(void)
	{
	 sda=1;
	delay(5);
	iic_clock();
	scl=1;
	}
	void iic_slave(void)
	{
	ack=1;
	iic_start();
	datiic=0;
	datiic=datiic1;
	while(k<=7)
	{
	 sda=check;
	 iic_clock();
	 datiic=datiic<<1;
	 k++;
	 delay(5);
	}
	 k=0;
	 sda=1;
	delay(5);
	 scl=1;
	delay(5);
	if(!sda);//check ack
	{
	ack=0;
	}
	scl=0;
	}
