#ifndef 24c02_H

#include <i2c.h>
#include <delay.h>

/***************************************************************************************
+ Либа для работы с eeprom 24с02, с использованием софтового i2c аля "дёргание пинами".
+ при объявлении данной функции, надо показать к каким пинам подключена шина i2c
+ Возможно будет работать с другими подобными eeprom.
Пример:
#asm
    .equ __i2c_port=0x18
    .equ __sda_bit=3
    .equ __scl_bit=4
#endasm

+ В дальнейшем возможна модернизация.
****************************************************************************************/

#define EEPROM_BUS_ADDRESS 0xa0  //адрес ведомой 24с02 (так в даташите написано)
                                

unsigned char eeprom_read(unsigned char address);       //чтение из eeprom
void eeprom_write(unsigned char address, unsigned char data);     //запись в eeprom

/***************************************************************************************
+ Читаем ячейку из 24с02.
+ В параметрах указывается адрес читаемой ячейки.
+ Функция возвращает прочитаное из ячейки.
****************************************************************************************/

unsigned char eeprom_read(unsigned char address) {
unsigned char data;                    //переменная для прочитаных данных
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address);                    //посылаем в шину адрес читаемой ячейки
i2c_start();                           //снова посылаем "старт" в шину
i2c_write(EEPROM_BUS_ADDRESS | 1);     //незнаю зачем но без этого не работает
data=i2c_read(0);                      //принимаем данные с лини и сохраняем в переменную
i2c_stop();                            //посылаем команду "стоп"
return data;                           //возврощаем значение прочитаного
}

/***************************************************************************************
+ Запись данных в ячейку 24с02.
+ В параметрах указывается адрес записываемой ячейки (adress).
+ Также указуем в параметрах данные которые надо записать в ячейку.
****************************************************************************************/

void eeprom_write(unsigned char address, unsigned char data) {   
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address);                    //посылаем в шину адрес записываемой ячейки
i2c_write(data);                       //посылаем данные для записи
i2c_stop();                            //посылаем команду "стоп"
}

#endif