Ср май 06, 2020 23:32:37
#define EEPROM_BUS_ADDRESS 0xa0 // Tyt stavim adress for EEPROM
/* Чтение байта из памяти EEPROM */
unsigned char eeplc24_read(unsigned char address_high, unsigned char address_low) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}
/* Запись байта в память EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_write(data);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(7);
}
#ifndef _24lcxx_INCLUDED_
#define _24lcxx_INCLUDED_
#pragma used+
/* Чтение байта из памяти EEPROM */
unsigned char eeplc24_read(unsigned char address_high, unsigned char address_low);
/* Запись байта в память EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char data);
#pragma used-
#pragma library 24lcxx.lib
#endif
Чт май 07, 2020 10:05:01
Чт май 07, 2020 10:18:32
/* Запись в память EEPROM len байт, *data - указатель на начало*/
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char *data, unsigned char len ) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
while(len--){
i2c_write(*(data+len));
}
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(7);
}
Чт май 07, 2020 10:57:48
Чт май 07, 2020 12:13:35
Чт май 07, 2020 17:13:32
Чт май 07, 2020 18:12:09
Чт май 07, 2020 18:20:53
Чт май 07, 2020 18:46:27
/* Чтение int из памяти EEPROM */
int eeplc24_read(unsigned char address_high, unsigned char address_low) {
int data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data = (((int)i2c_read(0))<<8) & 0xFF00;
data |= i2c_read(0) & 0xFF;
i2c_stop();
return data;
}
/* Запись int в память EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, int data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_write((data>>8) & 0xFF);
i2c_write(data & 0xFF);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(7);
}
/* Чтение long int из памяти EEPROM */
long int eeplc24_read(unsigned char address_high, unsigned char address_low) {
int data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data = (((long int)i2c_read(0))<<24) & 0xFF000000;
data |= (((long int)i2c_read(0))<<16) & 0xFF0000;
data |= (((long int)i2c_read(0))<<8) & 0xFF00;
data |= i2c_read(0) & 0xFF;
i2c_stop();
return data;
}
/* Запись long int в память EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, long int data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address_high);
i2c_write(address_low);
i2c_write((data>>24) & 0xFF);
i2c_write((data>>16) & 0xFF);
i2c_write((data>>8) & 0xFF);
i2c_write(data & 0xFF);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(7);
}
Пт май 08, 2020 01:09:15
Пт май 08, 2020 08:30:25
// это то, что уже есть
unsigned char eeplc24_read(unsigned char address_high, unsigned char address_low);
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char data);
// это функция чтения любого числа, массива и т.п.
void eeplc24_read_block(void *dest, unsigned int eadr, unsigned int len){
unsigned char * ptr = dest;
while(len--){
*ptr++ = eeplc24_read(eadr>>8, eadr);
eadr++;
}
}
// это функция записи любого числа, массива и т.п.
void eeplc24_write_block(void *src, unsigned int eadr, unsigned int len){
unsigned char * ptr = src;
while(len--){
eeplc24_write(eadr>>8, eadr, *ptr++);
eadr++;
}
}
// запись float по адресу 123
float data = 0.12E-3;
eeplc24_write_block(&data, 123, sizeof(float));
// чтение
eeplc24_read_block(&data, 123, sizeof(float));
int array[12];
eeplc24_write_block(array, 100, sizeof(array));
Пт май 08, 2020 09:32:09
Пт май 08, 2020 09:35:25
больше тоже можно, но постранично - муторно, зато быстро: страница пишется за то же время, что и 1 байт. читайте даташит, да.ELECTROS писал(а):Байт записать можно а больше нельзя
Пт май 08, 2020 10:13:15
Пт май 08, 2020 17:26:48
// это функция чтения любого числа, массива и т.п.
void eeplc24_read_block(void *dest, unsigned int eadr, unsigned int len){
unsigned char * ptr = dest;
while(len--){
*ptr++ = eeplc24_read(eadr>>8, eadr);
eadr++;
}
}
// это функция записи любого числа, массива и т.п.
void eeplc24_write_block(void *src, unsigned int eadr, unsigned int len){
unsigned char * ptr = src;
while(len--){
eeplc24_write(eadr>>8, eadr, *ptr++);
eadr++;
}
}
Пт май 08, 2020 17:57:22
Пт май 08, 2020 20:47:32
Пт май 08, 2020 20:58:20
#ifndef _24lcxx_INCLUDED_
#define _24lcxx_INCLUDED_
#pragma used+
/* Чтение байта ипамяти EEPROM */
unsigned char eeplc24_read(unsigned char address_high, unsigned char address_low);
/* запись в память EEPROM */
void eeplc24_write(unsigned char address_high, unsigned char address_low, unsigned char data);
// это функция чтения любого числа, массива и т.п.
void eeplc24_read_block(void *dest, unsigned int eadr, unsigned int len){
unsigned char * ptr = dest;
while(len--){
*ptr++ = eeplc24_read(eadr>>8, eadr);
eadr++;
}
}
// это функция записи любого числа, массива и т.п.
void eeplc24_write_block(void *src, unsigned int eadr, unsigned int len){
unsigned char * ptr = src;
while(len--){
eeplc24_write(eadr>>8, eadr, *ptr++);
eadr++;
}
}
#pragma used-
#pragma library 24lcxx.lib
#endif
Пт май 08, 2020 21:54:06
Пт май 08, 2020 22:53:56