Skocz do zawartości

[asm] at89s52 "reprezentacja" dużych liczb.


Pomocna odpowiedź

Napisano

Witam.

; Na wstępie dodam że nie do końca potrafie wyjaśnić o co mi chodzi ale mam gotową koncepcje jak ma to działać i brak pomysłu na wykonanie.

No to o co mi chodzi:

Czy można "spreparować" dodatkowy 32 bitowy rejestr (np. z DPTR oraz R2 i R3) w którym pojedyńczy bit reprezentowałby jedną linie wybranego portu tak aby po wpisaniu dowolnej 4 bajtowej liczby do tego rejestru odpowiednie linie portów przybrały odpowiednie stany?

Troche to dziwne i sam myślałem jak możnaby coś takiego zrealizować nie tracąc dużo miejsca w pamięci programu , ale na nic nie wpadłem.

Prosze o pomoc.

Czy można "spreparować" dodatkowy 32 bitowy rejestr

Można. Możesz użyć dowolnych rejestrów ogólnego przeznaczenia, albo od razu wpisuj wartość na porty.

No chyba zle to wytlumaczylem....

chodzi mi o "stworzenie" czili niejako przypisanie zakresu adresów dla nowo zdefinowanego rejestru np. R32 tak aby : najmłodsze 8 bitów tego rejestru/obszaru pamięci odpowiadało P0.0 - P0.7 , kolejne 8 bitów P1.0 - P1.7 , następne 8 bitów P2.0 - P2.7 , a ostatnie P3.0 - P3.7. A więc używając następującej składni wszystkie linie wszystkich portów przyjełyby stany wysokie. No to cos takiego jest możliwe czy niezabardzo?

 mov R32,#FFFFFFFF;

Chciałem zrealizować to za pomocą DPTR oraz 2 rejestrów ogólnego przeznaczenia , jednak nie potrafie tego zrealizować. Jeżeli ktoś spotkał się z czymś podobnym lub zna inną metode (jakieś wymyślne dzielenie liczby przez podprogram ?) to bardzo prosze o pomoc.

Nie jestem pewien, ale to co chcesz zrobić powinno się dać uzyskać za pomocą DMA, ale oczywiście wykorzystywany przez ciebie mikrokontroler nie posiada DMA. Pozostaje ci więc po prostu przepisywanie tego ręcznie. Napisz sobie podprogram który będzie przepisywał zawartość czterech rejestrów na porty. Wtedy za pomocą jednej instrukcji call będziesz miał przepisaną liczbę 32 bitową na cztery porty.

mov R32,#FFFFFFFF;

Ja nie jestem pewien czy na poziomie kompilacji nie wyrzuci błędu z powodu za długiego słowa. Jeżeli nie to da się to łatwo zrobić w prostej funkcji. Każdy stan portów jest zapisywany w komórce pamięci. Bardzo możliwe że możesz to sprawdzić w dokumentacji. Pewnie nie będą koło siebie tylko będą rozdzielone kilkoma słowami pamięci również odpowiadającymi jakiejś konfiguracji portu. Za pomocą wskaźników będziesz mógł jedym movxem rozesłać wszystkie polecenia do odpowiednich portów. tak dla rozjaśnienia. Wpisujesz do komórki pamięci NIE twoje 0FFFFFFFFH(ta komórka pamięci nie może być używana przez program ani stos) a zamiast tego w tej komórce po kolei znajdują się wskaźniki do portów od 0 do 3. Chcesz zmienić konfigurację to wysyłasz jakąś wartość na adresy poddane w komórkach. Jak podasz początkowy adres to on automatycznie pobierze kolejne 3 dla kolejnych portów

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ę »
×
×
  • Utwórz nowe...