-AVRStudio такие команды принимает.
-Ардуино тоже должна такие команды принимать.
Запись я делают так:
-записываю в буфер.
-считаю CRC32 для буфера.
-после записи делаю верификацию.
-если в процессе записи произошла ошибка то устанавливается флаг "ошибка" и загорается светодиод "ошибка".
Спойлер
Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////TX_EEPROM:
void TX_EEPROM(void)
{
/////////////////////////////////////////////// TX: Interrupts:
//#asm("sei") // вкл Global Interrupts
#asm("cli") // выкл Global Interrupts
/////////////////////////////////////////////// сброс флаг error_EEPROM
error_EEPROM = 0;
/////////////////////////////////////////////// флаг > TX_int
TX_int[0] = blok_sys; // blok_sys //-начальное 0.
TX_int[1] = Lampa; // Lampa
TX_int[2] = 0; //
TX_int[3] = slider_5; // Ползунок 5 Температура MAX
TX_int[4] = slider_4; // Ползунок 4 Температура MIN
TX_int[5] = hour_ON; // часы ON
TX_int[6] = min_ON; // минуты ON
TX_int[7] = hour_OFF; // часы OFF
TX_int[8] = min_OFF; // минуты OFF
TX_int[9] = 0;
TX_int[10] = 0;
TX_int[11] = 0;
/////////////////////////////////////////////// crc:
//TX_int[12] = 0;
//TX_int[13] = 0;
//TX_int[14] = 0;
//TX_int[15] = 0;
/////////////////////////////////////////////// crc буфер EEPROM:
TX_len = 16;
fcrcTX();
/////////////////////////////////////////////// запись буфер > EEPROM:
for (xTX=0; xTX<TX_len; xTX++) {
EEAR = xTX;
EEDR = TX_int[xTX];
EECR |= 0b00000100;
EECR |= 0b00000010;
while(EECR & 0b00000010);
};
/////////////////////////////////////////////// верификация: (EEPROM == буфер)
for (xTX=0; xTX<TX_len; xTX++) {
EEAR = xTX;
EECR |= 0b00000001;
x1TX = EEDR;
if ( TX_int[xTX] != x1TX ) {error_EEPROM = 1;}; // флаг error_EEPROM
};
/////////////////////////////////////////////// LCD
if (error_EEPROM) {PORTD.6=1; PORTD.7=1;} // флаг error_EEPROM
else {PORTD.6=0; PORTD.7=0;}; // сброс флаг error_EEPROM
/////////////////////////////////////////////// TX: Interrupts:
#asm("sei") // вкл Global Interrupts
//#asm("cli") // выкл Global Interrupts
};
////////////////////////////////////////////////////////////////////////////////-читаю в буфер.
-считаю CRC32 для буфера.
-если в процессе чтения произошла ошибка то устанавливается флаг "ошибка" и загорается светодиод "ошибка".
Спойлер
Код: Выделить всё
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////RX_EEPROM:
void RX_EEPROM(void)
{
/////////////////////////////////////////////// TX: Interrupts:
//#asm("sei") // вкл Global Interrupts
#asm("cli") // выкл Global Interrupts
/////////////////////////////////////////////// сброс флаг error_EEPROM
error_EEPROM = 0;
/////////////////////////////////////////////// чтение EEPROM > буфер:
for (xTX=0; xTX<16; xTX++) {
EEAR = xTX;
EECR |= 0b00000001;
TX_int[xTX] = EEDR;
};
/////////////////////////////////////////////// crc буфер EEPROM:
RX_len = 16;
fcrcRX();
/////////////////////////////////////////////// проверка crc:
if (crcRX==0) {
////////////////////////////////////////////// TX_int > флаги
blok_sys = TX_int[0]; // blok_sys //-начальное 0.
Lampa = TX_int[1]; // Lampa
// = TX_int[2]; //
slider_5 = TX_int[3]; // Ползунок 5 Температура MAX
slider_4 = TX_int[4]; // Ползунок 4 Температура MIN
hour_ON = TX_int[5]; // часы ON
min_ON = TX_int[6]; // минуты ON
hour_OFF = TX_int[7]; // часы OFF
min_OFF = TX_int[8]; // минуты OFF
}
/////////////////////////////////////////////// error_crc:
else {
error_EEPROM = 1; // флаг error_EEPROM
};
/////////////////////////////////////////////// LCD
if (error_EEPROM) {PORTD.6=1; PORTD.7=1;} // флаг error_EEPROM
else {PORTD.6=0; PORTD.7=0;}; // сброс флаг error_EEPROM
/////////////////////////////////////////////// TX: Interrupts:
#asm("sei") // вкл Global Interrupts
//#asm("cli") // выкл Global Interrupts
};
////////////////////////////////////////////////////////////////////////////////Но я отключаю. Чтобы мне ничего не мешало))
Ещё можно добавить шифрование.
Чтобы враг не догадался))