Skocz do zawartości

[C] AVR - obsługa wyświetlacza LCD


ciscoc

Pomocna odpowiedź

Witam, mam pytanie odnośnie fragmentu kodu

Wyslij_do_LCD:

void Wyslij_do_LCD(int8_t bajt)
{
PORT_LCD|=_BV(EN_LCD);

PORT_LCD=(bajt & 0xF0) | (PORT_LCD & 0x0F);

PORT_LCD&=~(_BV(EN_LCD));
}

mam pytanie która/ skąd zostanie wzięta zawartość PORT_LCD podkreślona na czerwono, jaką ona ma wartość?

Fragment kodu z książki "AVR & ARM7 programowanie uC dla każdego" str. 253

Link do komentarza
Share on other sites

jaką wartość wczyta PORT_LCD?

w markrodefinicji jest napisane:

#define PORT_LCD PORTB

wiem że pod PORT_LCD podstawi PORTB ale mnie interesuje skąd tę wartość weźmie, jaka tam będzie wartość bitowa (zero/jedynkowa)?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wszystko zależy od typu procesora na jaki kompilujesz kod. Przecież kompilator nic nie wie o adresach jakiegokolwiek rejestru peryferyjnego a do kompilacji każdego pliku startuje z "czystą kartką" nie znając żadnych symboli (oprócz kilku wbudowanych). Twoje środowisko (IDE - np. Arduino, Eclipse czy Atmel Studio) musiałeś jakoś powiadomić na jaki procesor chcesz otrzymać kod i to ono załatwiło to, że oprócz Twojego pliku dołączanych jest - trochę automatycznie - wiele różnych plików nagłówkowych typu h. Jeden z nich musi zawierać definicje wszystkiego co siedzi w procesorze: rejestrów portów, położenia bitów, wielkości dostępnej pamięci itp, itd.. Sprawdź na jaki procesor masz ustawione środowisko i znajdź odpowiedni dla niego plik h. Będziesz w nim miał setki linii #define. Będzie też oczywiście ta definiująca wartość symbolu PORTB a potem po nitce do kłębka. Jeżeli środowisko jest w miarę nowe, wspiera automatyczne wskazywanie definicji i miejsc użycia symboli więc - tak jak pisze Chumanista - tam wystarczy najechać myszą i kliknąć odpowiednią pozycję z menu kontekstowego, a do edytora zostanie załadowany i pokazany odpowiedni plik z definicją.

Link do komentarza
Share on other sites

dzięki za informacje, przyznam że nie wiedziałem o tym. Uczę się programowania z wspomnianej książki ale nie trafiłem tam na informacje że PORTB ukryty jest w bibliotece i przyjmuje tam jakąś konkretną wartość, do tej pory postrzegałem to że to ja nadaję rejestrowi POTR jakąś wartość.

Ale człowiek mało wie, szkoda że podręcznik nie podaje takich rzeczy

Link do komentarza
Share on other sites

Ależ nadajesz mu jakąż wartość. W bibliotekach jest tylko informacja gdzie ten rejestr faktycznie jest, to się zmienia w zależności od tego jakiego procesora używasz. PORTB to uniwersalna nazwa pod którą biblioteka odpowiednia do procesora podstawia fizyczny adres rejestru.

PORT_LCD=(bajt & 0xF0) | (PORT_LCD & 0x0F);

czyli w miejsce (PORT_LCD & 0x0f) zostanie podstawiona wartość 0x18, tak?

Nie. Zostanie podstawione (o ile masz taki sam procesor jak ja):

_SFR_IO8(0x18)

Pod co zostanie podstawione:

_MMIO_BYTE((0x18) + __SFR_OFFSET)

Pod co zostanie podstawione:

(*(volatile uint8_t *)(((0x18) + 0x20))
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.