w1941srobot Napisano Sierpień 29, 2012 Udostępnij Napisano Sierpień 29, 2012 Witam szukam po internecie jak odczytywać dane z eeprom po i2c w języku asm ale nic nie widzę wszystko w C albo bascomie, a asm dlatego że chce się go nauzyć. Napisałem już część kodu która działa i wysyła bajt pod odpowiedni adres komórki w eeprom 24c04 wszystko według tego TUTORIALU , droga część kodu odpowiedzialna za odebranie bajtu jest zrobiona w połowie ponieważ nw. do czego zapisywany jest bajt i jak go zapisać do zmiennej żeby potem można było użyć jej w bascomie, a tu macie kod: $regfile = "m8def.dat" 'zadeklarowanie użytego procesora $crystal = 8000000 Config Portd.0 = Output Declare Sub Wr Declare Sub Rd Dim Komorka As Byte Dim Bajt As Byte Dim Odczytana As Byte Komorka = 1 Bajt = 3 Sub Wr 'write(zapis) $asm ldi r16,&B10100100 Out Twcr , R16 'sekwencja startowa Wait1: in r16,TWCR sbrs r16,TWINT ' odczekaj az wysle sekwencje startowa rjmp wait1 LDI r16, &B10100000 'adres pamieci i ostatni bit 0= zapis Out Twdr , R16 ldi r16, &B10000100 Out Twcr , R16 Wait2: in r16,TWCR 'odczekaj i spr sbrs r16,TWINT rjmp wait2 LDS r16, {komorka} 'adres komorki w ktorej ma byc zapisany bajt Out Twdr , R16 ldi r16, &B10000100 Out Twcr , R16 Wait3: in r16,TWCR sbrs r16,TWINT 'odczekaj i spr rjmp wait3 LDS r16, {bajt} Out Twdr , R16 'bajt do zapisania i wyslanie ldi r16, &B10000100 Out Twcr , R16 Wait4: in r16,TWCR 'odczekaj i spr sbrs r16,TWINT rjmp wait4 ldi r16, &B10010100 'koniec Out Twcr , R16 $end Asm End Sub Sub Rd 'read (odczyt) $asm ldi r16,&B10100100 Out Twcr , R16 'sekwencja startowa Wait10: in r16,TWCR sbrs r16,TWINT ' odczekaj az wysle sekwencje startowa rjmp wait10 LDS r16, &B10100000 'adres pamieci i ostatni ZAPIS Out Twdr , R16 ldi r16, &B10000100 Out Twcr , R16 Wait20: in r16,TWCR 'odczekaj i spr zy wyslalo adres pamieci sbrs r16,TWINT rjmp wait20 LDS r16, &B00000011 Out Twdr , R16 ldi r16, &B10000100 'adres komorki z ktorej ma nastapic odzyt Out Twcr , R16 Wait30: in r16,TWCR 'odczekaj i spr sbrs r16,TWINT rjmp wait30 ldi r16,&B10100100 'sekwencja startowa Out Twcr , R16 Wait40: in r16,TWCR sbrs r16,TWINT ' odczekaj az wysle rjmp wait50 LDS r16, &B10100001 'adres pamieci i ostatni bit=1 - odczyt Out Twdr , R16 ldi r16, &B10000100 Out Twcr , R16 Wait50: in r16,TWCR 'odczekaj i spr sbrs r16,TWINT rjmp wait50 'I TU MA BY SaMO ODEBRANIE BAJTU I ZAPISANIE DO ZMIENNEJ W RAM, Jak to zrobić ???? ldi r16, &B10010100 'koniec Out Twcr , R16 $end Asm End Sub [ Dodano: 29-08-2012, 16:30 ] POMOCY 🙁. Link do komentarza Share on other sites More sharing options...
BlackJack Sierpień 29, 2012 Udostępnij Sierpień 29, 2012 Dla czego nie przejrzysz sobie not aplikacyjnych ATMELA, tam jest wszystko i przewaznie w ASM. Link do komentarza Share on other sites More sharing options...
w1941srobot Sierpień 30, 2012 Autor tematu Udostępnij Sierpień 30, 2012 Przeglądałem z 10 razy bo ten kod jest w oparciu o datasheet. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »