Pytanie: Jakich rejestrów używam, aby uzyskać dostęp do IO na Arduino Uno, kiedy używam asemblera do programowania?
Tło: Byłem zainteresowany ćwiczeniem umiejętności asemblera na Arduino (myślałem, że łatwiej będzie włączyć / wyłączyć diody LED niż martwić się o IO konsoli). Po przeprowadzeniu wstępnego wyszukiwania odkryłem, że do programowania Arduino można użyć zestawu narzędzi AVR. Jednak nie do końca wiem, jak znaleźć odpowiednie rejestry dla pinów IO.
Arkusze danych dla mikrokontrolerów AVR są dość dobre do odczytania. Wystarczy Google dla dokładnego kontrolera w Arduino (np. ATmege328) i znajdź arkusz danych „Kompletny” na stronie atmel.com . Nie pobieraj „Podsumowania”, nie zawiera ono wielu informacji. Pobierz arkusz danych z atmel.com, która jest jedyną lokalizacją z najnowszą dokumentacją.
Istnieją trzy rejestry używane w podstawowym We / Wy (patrz rozdział „Porty we / wy”):
Gdzie n jest identyfikatorem portu, litera od A, B, C, ... w zależności od liczby pinów IO twojego kontrolera. Każdy bit w każdym rejestrze reprezentuje pojedynczy pin GPIO (tak, potrzebujesz podstawowej wiedzy na temat binarnych, aby w pełni to zrozumieć).
DDR n , rejestr kierunku danych: zasadniczo konfiguruje pin dla wejścia (0) lub wyjścia (1).
Rejestr danych PORT n , Port n: Gdy pin jest ustawiony jako wyjściowy, odpowiedni bit przełącza pin wysoki na (1) lub niski (0). Po skonfigurowaniu jako wejście umożliwia słaby rezystor podciągający na styku wyjściowym.
PIN n , Port n Rejestr wejść: Użyj tego rejestru, aby odczytać bieżący poziom na pinie skonfigurowanym jako wejście.
To. Krok 1: Przestań myśleć o tym jak o arduino. To nie jest. To ATmega MCU na płytce drukowanej. 2. Przeczytaj arkusz danych. 3. Naprawdę nie, przeczytaj arkusz danych .
Connor Wolf
Ach ... właśnie tego potrzebowałem. Wydaje mi się, że spędziłem tyle czasu, szukając samouczków ukierunkowanych na Arduino, że zapomniałem po prostu programować kontroler AVR i mogłem skorzystać z jego arkusza danych.
Odpowiedzi tylko na link nie są przydatne dla witryny, ponieważ nie próbujemy utworzyć repozytorium linków. Co więcej, odpowiedź tylko na link jest bezużyteczna, jeśli link kiedykolwiek spadnie w przyszłości. Lepiej byłoby streścić lub sparafrazować treść w samej odpowiedzi, aby użytkownicy mogli znaleźć tutaj to, czego potrzebują, lub przynajmniej uzyskać wystarczający kontekst, aby móc samodzielnie znaleźć rozwiązania.
Sprawdź to: http://arduino.cc/en/Reference/PortManipulation
Ponadto: http://arduino.cc/en/Hacking/PinMapping168
Jeśli chodzi o inne porty i piny, zaznacz pole danych kontrolera, są naprawdę przydatne dla osób, które je rozumieją! :)
źródło