Start Publikacje Skrypt do zajęć z programowania mikrokontrolerów AVR w językuC - CZĘŚĆ IV

Skrypt do zajęć z programowania mikrokontrolerów AVR w językuC - CZĘŚĆ IV

Drukuj Email
Wpisany przez inż. Arkadiusz Krysiak   


OPA

 

1.13. Umieszczanie zmiennych w pamięci EEPROM

Pamięć EEPROM ze względu na swą nieulotność po wyłączeniu zasilania może utrzymywać różne dane (ustawienia urządzenia, specjalne klucze itp.), które nie powinny zniknąć po wyłączeniu urządzenia. Zmienne zdefiniowane i przechowywane w pamięci EEPROM potrzebują specjalnych procedur dostępu. Procedury te znajdują się w pliku nagłówkowym .<<eeprom.h>
Poniżej przedstawiony jest sposób umieszczenia danych inicjalizujących zmienne zawarte w pamięci eeprom w chwili kompilacji i załadowania programu do pamięci mikrokontrolera.

 

#include <<avr/eeprom.h>

uint16_t ee_pwm EEMEM = 42;        // ta zmienna znajdzie się w pamięci eeprom
mikrokontrolera.

uint8_t FlashString[] EEMEM = "Ten tekst znajdzie się w pamięci eeprom
mikrokontrolera";
char zm_w_ee[] EEMEM = "Lancuch w pamięci EEPROM";
int main (void) {
return 0;
}

Dostępne definicje i funkcje w pliku nagłówkowym "eeprom.h” to:

EEMEM
void eeprom_is_ready()
void eeprom_busy_wait()
uint8_t eeprom_read_byte (const uint8_t *addr)
uint16_t eeprom_read_word (const uint16_t *addr)
void eeprom_read_block (void *pointer_ram,
const void *pointer_eeprom, size_t n)
void eeprom_write_byte (uint8_t *addr,uint8_t value)
void eeprom_write_word (uint16_t *addr,uint16_t value)
void eeprom_write_block (const void *pointer_ram,
void *pointer_eeprom, size_t n)

Poniżej jest przedstawione przykładowe użycie wymienionych definicji.

Funkcje bajtowe:

void eeprom_write_byte (uint8_t *addr, uint8_t val);

Ta funkcja pozwala na zapis wartości val pod zdefiniowany adres addr. Realizujemy to tak jak w przykładzie poniżej:

#include <<avr/eeprom.h>   //                                                                 test09
int main (void) {
char x;
x=23;
uint16_t* wsk;
wsk=(uint16_t*)6;
eeprom_write_word (wsk,(uint16_t)x);
return 0;
}
unsigned char eeprom_read_byte (uint8_t *addr);

Funkcja eeprom_read_byte pozwala odczytać jeden bajt pamięci EEPROM z pod adresu addr.

#include <<avr/eeprom.h>   //                                                                      test10
int main (void) {
char x;                                               // zmienna pomocnicza o rozmiarze bajt
uint8_t* wsk;                                      // zdefiniowanie wskaźnika
wsk=(uint8_t*)6;                                // przypisanie wartości wskaźnikowi
x=eeprom_read_byte (wsk);                // odczyt jednego bajtu z pod adresu 0
return 0;
}