Liviu M Postat Iunie 5, 2012 Partajează Postat Iunie 5, 2012 Fiind mai mic de 65535 = 2^16, are nevoie de doar 2 octeti (16 biti). O bucata de cod pentru picc de la hi-tech ar fi: void main (void){ unsigned char ucLsb = 0; unsigned char ucMsb = 0; int iNumarDeSalvat; unsigned char ucAddrLsb = 0; unsigned char ucAddrMsb = 1; iNumarDeSalvat = 65362; ucLsb = iNumarDeSalvat & 0xFF; ucMsb = (iNumarDeSalvat >> 8) & 0xFF; eeprom_write(ucAddrLsb, ucLsb); eeprom_write(ucAddrMsb, ucMsb);}La & 0xFF cred ca poti renunta, e numai asa, de impresie artistica. Link spre comentariu
svi67 Postat Iunie 5, 2012 Autor Partajează Postat Iunie 5, 2012 Multumesc,Sa inteleg ca pot memora direct orice numar fara sa depasesc 255.Concret as vrea sa memorez numerele cu valoare aproximativa de 592 si 320 care vor proveni de la o setare si sa le pot citi mai tarziu pentru o comparare.Formula lui Liviu Meste valabila si pentru numerele acestea? Din formula reiese ca numarul este salvat in doua locatii eeprom_write(ucAddrLsb, ucLsb); si eeprom_write(ucAddrMsb, ucMsb); cum procedez cu al doilea numar si cum reconstiui numerele dupa citire? Nu ma-m prins inca de setarile eepromului dar am dedus ca daca aceste numere nu variaza foarte mult pot sa scad o valoare fixa din ele ,sa memorez diferenta iar la citire sa adaug ce am scazut din ele sau ma complic prea tare?Daca aceste numere vor varia intre 20 si 600 ideea mea nu mai este valabila.Mai am o nelamurire cu locatia in care se vor memora cele doua numere nu stiu cum sa procedez:EEPROM_Write(0,Numar1); si EEPROM_Write(1,Numar2);daca nu depasesc 255 este corect? Sau trebuie sa precizez locatia exacta cum ar fi EEPROM_Write(0x00,Numar1); si EEPROM_Write(0x01,Numar2);Dupa formula de mai sus locatiile 0 si 1 sunt deja ocupate cu primul numar si nu am idee cum sa continui. Link spre comentariu
Liviu M Postat Iunie 5, 2012 Partajează Postat Iunie 5, 2012 Sa inteleg ca pot memora direct orice numar fara sa depasesc 255. Da. Formula lui Liviu M este valabila si pentru numerele acestea? Da Din formula reiese ca numarul este salvat in doua locatii eeprom_write(ucAddrLsb, ucLsb); si eeprom_write(ucAddrMsb, ucMsb); cum procedez cu al doilea numar si cum reconstiui numerele dupa citire? ucAddrx sunt doar nume mai usor de folosit/mai sugestive decat numerele simple. Probabil e chiar mai bine sa folosesti #define-uri. Daca vrei sa mai scrii alte numere in eeprom, folosesti alte adrese (variabile cu alte valori, define-uri, scrii adresele direct in apelul functiei...) De exemplu eeprom_write(ucAddrLsb+2, ucLsb2); eeprom_write(ucAddrMsb+2, ucMsb2); Ca sa reconstituiesti valoarea salvata pe bucati in eeprom, faci operatia inversa - muti bitii din registrul MS la stanga cu 8 biti si-i adaugi al doilea registru (LS) int iNumarRecuperat = 0;iNumarRecuperat = eeprom_read(ucAddrMsb) << 8;iNumarRecuperat += eeprom_read(ucAddrLsb) ; EEPROM_Write(0,Numar1); si EEPROM_Write(1,Numar2)... Sau trebuie sa precizez locatia exacta cum ar fi EEPROM_Write(0x00,Numar1); si EEPROM_Write(0x01,Numar2) Cele doua forme sunt echivalente. sunt doar scrise altfel (in zecimal, respectiv hexazecimal). Dupa formula de mai sus locatiile 0 si 1 sunt deja ocupate cu primul numar si nu am idee cum sa continui. cu 2, 3, 4... pana umplii memoria (cred ca ai 256 de locatii, da' nu-s sigur). Restul intrebarilor nu le-am inteles. Link spre comentariu
svi67 Postat Iunie 5, 2012 Autor Partajează Postat Iunie 5, 2012 Multumesc mult,ma apuc sa pun in practica cele invatate. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum