24c16 ma wyprowadzone a0...a2 wiec jest możliwość ustawić adres urządzenia i może być ich dokładnie 8 (adresów ), czyli tyle ile może zaadresować szyna i2c.
Format danych adresu urządzenia wygląda tak :
1010 -cztery stałe bity sygnatury
x x x - trzy bity adresu, reprezentują je nóżki A2, A1, A0 ,jeśli wszystkie są wyprowadzone to adres można ustalać od 0...8
X -ostatni bit jest odpowiedzialny za odczyt/zapis.
Podsumowując : 1010 xxx X wysłane na szynę i2c, zaktywizuje tylko układ o adresie xxx do odczytu lub zapisu w zależności od bitu X.
Następnie na szynę wysyłamy adres danej (czyli pozycje w eepromie) do zapisu/odczytu.
Cytat: Czy z 24c16 adresowanym np. pod 160/161 będzie podobnie:
- pod 160 zapisujemy stronę pamięci np. 172 (dla zapisu) 173 (dla odczytu)
- spod 172 czytamy dane, pod 173 zapisujemy dane?
Nie.
Do urządzenia o adresie np. 160 (1010
000 0) wysyłamy polecenie zapisu danej której adres (pozycja w eeprom) zawarta jest w następnym rozkazie, to samo dotyczy odczytu : np 161 (1010
000 1), w obu przypadkach rozkaz zawiera tylko adres urządzenia i bit zapis/odczyt.
Przyklad :
acall start
mov a,#160 ;adres urzadzenia + bit zapisu
acall write
mov a,poz_epr ; adres w eepromie
acall write
mov a,dana ; bajt do zapisu
acall write
---------
no i odczyt :
acall start
mov a,#160 ;adres urzadzenia + bit zapisu
acall write
mov a,poz_epr ; adres do odczytania w eepromie
acall write
acall start
mov a,#161 ; adres urządznie + bit odczytu
acall write
acall read ; odczyt danej z eepromu, spod adresu wczesniej ustalonego.
Uff, to chyba byłoby na tyle.