
int INT_EEP;
char WriteEEP(const unsigned int adr)
{
 char _temp;
 ClrBit(TWCR,0b00010000);  //старт
 SetBit(TWCR,0b10100100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x08) return _temp; 
 
 TWDR=0b10100000;
 ClrBit(TWCR,0b00110000);   //слэйв адресс
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x18) return _temp; 
 
 TWDR=adr/256; 
 ClrBit(TWCR,0b00110000);    //старший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) return _temp; 
 
 TWDR=(adr&0x00FF);
 ClrBit(TWCR,0b00110000);    //младший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 if(_temp!=0x28) return _temp; 
 
 TWDR=iEEP/256;
 //TWDR=abs(iEEP)/256;
 //if(iEEP<0) TWDR^=0xFF;
 ClrBit(TWCR,0b00110000);    //записать старший байт данных
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) return _temp; 
 
 TWDR=(iEEP&0x00FF);
 ClrBit(TWCR,0b00110000);    //записать младший байт данных
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) return _temp;  
 
 ClrBit(TWCR,0b00100000);   //stop
 SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 ClrBit(TWCR,0b00100100);   //stop
 //SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 return 0xFF;
}

char ReadEEP(const unsigned int adr)
{
 char _temp;
 ClrBit(TWCR,0b00010000);  //старт
 SetBit(TWCR,0b10100100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x08) 
 {  
  return _temp; 
 }
 
 TWDR=0b10100000;
 ClrBit(TWCR,0b00110000);   //слэйв адрес
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x18) return _temp; 
 
 TWDR=adr/256;
 ClrBit(TWCR,0b00110000);    //старший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) return _temp; 
 
 TWDR=(adr&0x00FF);
 ClrBit(TWCR,0b00110000);    //младший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) return _temp; 
 //Delay_ms(10);
 ClrBit(TWCR,0b00100000);   //stop
 SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 ClrBit(TWCR,0b00100000);   //stop
 SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 ClrBit(TWCR,0b00010000);  //стоп/старт
 SetBit(TWCR,0b10100100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x08) return _temp; 
 
 TWDR=0b10100001;
 ClrBit(TWCR,0b00110000);   //слэйв адресс
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x40) return _temp;  
 
 ClrBit(TWCR,0b00110000);    //считать старший байт данных
 SetBit(TWCR,0b11000100);
 Delay_mks(100);
 iEEP=TWDR*256;
 iEEP&=0xFF00;
 _temp=TWSR&0b11111100;
 if(_temp!=0x50) return _temp;  
 
 ClrBit(TWCR,0b00110000);    //считать младший байт данных
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 iEEP=iEEP+TWDR;
 _temp=TWSR&0b11111100;
 if(_temp!=0x50) return _temp;   
 
 
 ClrBit(TWCR,0b00100100);   //stop
 //SetBit(TWCR,0b10010000);
 Delay_mks(100); 
 
 return 0xFF; 
}


char *ReadEEPstr(const unsigned int adr,const char n)
{
 char _temp,_temp1;
 char spp[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 ClrBit(TWCR,0b00010000);  //старт
 SetBit(TWCR,0b10100100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x08) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 }
 
 TWDR=0b10100000;
 ClrBit(TWCR,0b00110000);   //слэйв адрес
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x18) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 } 
 
 TWDR=adr/256;
 ClrBit(TWCR,0b00110000);    //старший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 }
 
 TWDR=(adr&0x00FF);
 ClrBit(TWCR,0b00110000);    //младший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 } 
 
 ClrBit(TWCR,0b00100000);   //stop
 SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 ClrBit(TWCR,0b00100000);   //stop
 SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 ClrBit(TWCR,0b00010000);  //стоп/старт
 SetBit(TWCR,0b10100100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x08) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 } 
 
 TWDR=0b10100001;
 ClrBit(TWCR,0b00110000);   //слэйв адресс
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 _temp=TWSR&0b11111100;
 if(_temp!=0x40) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 }
 
 _temp1=0;  
 while(_temp1<n)
 {
  ClrBit(TWCR,0b00110000);    //считать старший байт данных
  SetBit(TWCR,0b11000100);
  Delay_mks(100);
  spp[_temp1]=TWDR;  
  _temp=TWSR&0b11111100;
  if(_temp!=0x50) 
  {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 }
  _temp1++;
 }  
 
 ClrBit(TWCR,0b00110000);    //считать младший байт данных
 SetBit(TWCR,0b10000100);
 Delay_mks(100);
 spp[n]=TWDR;
 _temp=TWSR&0b11111100;
 if(_temp!=0x50) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return "error";
 } 
 
 ClrBit(TWCR,0b00100100);   //stop
 //SetBit(TWCR,0b10010100);
 Delay_mks(100); 
 
 return spp; 
}



char WriteEEPstr(const unsigned int adr,char str[],const char n)
{
 char _temp,_temp1;
 ClrBit(TWCR,0b00010000);  //старт
 SetBit(TWCR,0b10100100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x08) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return _temp;
 } 
 
 TWDR=0b10100000;
 ClrBit(TWCR,0b00110000);   //слэйв адресс
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x18) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return _temp;
 } 
 
 TWDR=adr/256;
 ClrBit(TWCR,0b00110000);    //старший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
 if(_temp!=0x28) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return _temp;
 } 
 
 TWDR=(adr&0x00FF);
 ClrBit(TWCR,0b00110000);    //младший адрес памяти
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 if(_temp!=0x28) 
 {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return _temp;
 }
  
 _temp1=0;
 while(_temp1<n)
 {
  TWDR=str[_temp1];  
  ClrBit(TWCR,0b00110000);    //записать байт данных
  SetBit(TWCR,0b10000100);
  Delay_mks(50);
  _temp=TWSR&0b11111100;
  if(_temp!=0x28) 
  {
   /*ClrBit(TWCR,0b00100000);   //stop
   SetBit(TWCR,0b10010100);
   Delay_mks(50);
   ClrBit(TWCR,0b00100100);*/
   return _temp;
  }
  _temp1++;
 }
    
 TWDR=0;  
 ClrBit(TWCR,0b00110000);    //записать байт данных
 SetBit(TWCR,0b10000100);
 Delay_mks(50);
 _temp=TWSR&0b11111100;
  if(_temp!=0x28) 
  {
  /*ClrBit(TWCR,0b00100000);   //stop
  SetBit(TWCR,0b10010100);
  Delay_mks(50);
  ClrBit(TWCR,0b00100100);*/
  return _temp;
  }
  
 ClrBit(TWCR,0b00100000);   //stop
 SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 ClrBit(TWCR,0b00100100);   //stop
 //SetBit(TWCR,0b10010100);
 Delay_mks(50);
 
 return 0xFF;
}