logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATMega8 + assembler - jak napisać program filtrujący dane z tablicy?

Lulubella 07 Lis 2016 21:21 1338 11
REKLAMA
  • #1 16046948
    Lulubella
    Poziom 2  
    Cześć!

    Od niedawna na zajęciach przerabiamy ATMega8. Pierwszy raz mam styczność z programowaniem niskopoziomowym i nie mam pojęcia jak rozwiązać konkretne zadanie, google nie pomogło mi zbyt wiele. Muszę wykonać program filtrujący dane z tablicy n=100 elementowej, o wartościach od 99 do 0, do innej, obie zapisane w pamięci SRAM. Warunki filtru:
    − liczby parzyste,
    − liczby podzielne przez 4,
    − liczby dla których bit B3=0,
    − liczby dla których bit B3=1 i B1=0,
    − liczby dla których bit B3=1 lub B1=0,
    − liczby z przedziału <5, 25>,
    − liczby spoza przedziału <5, 25>

    Zdaję sobie sprawę z tego, że czeka mnie wiele do nauczenia. Pewnie zadanie jest trywialne, tak więc proszę o nieco wyrozumiałości dla mnie - początkującej. Chciałabym to przede wszystkim zrozumieć i wiedzieć jak wykonać. :)
  • REKLAMA
  • #2 16047035
    tronics
    Poziom 38  
    Sprecyzuj proszę programowanie niskopoziomowe... jeśli masz to wykonać w asm avr to taka informacja powinna się znaleźć, nie jest to też programowanie ogólne.
    liczby parzyste chyba łatwo zweryfikować, jeśli uwzględnimy 0 jako parzyste to liczbą parzystą będzie wszystko co ma LSB=0 prawda? Podobnie podzielna przez 4 to będzie każda liczba, która ma jedynkę na lub powyżej bitu 2 i zera poniżej. Reszta analogicznie.
  • REKLAMA
  • #3 16049943
    Lulubella
    Poziom 2  
    Użyłam AVR Studio, program powinien zostać napisany w assemblerze. Nie wiem jakich komend powinnam użyć do napisania filtra.
  • REKLAMA
  • #4 16050007
    Konto nie istnieje
    Konto nie istnieje  
  • #5 16050081
    BlueDraco
    Specjalista - Mikrokontrolery
    Najpierw napisz to w C na PC. Kiedy uruchomisz i przetestujesz - napisz w asemblerze. Cały algorytm polega na użyciu operacji iloczynu logicznego do wycięcia interesującego bitu lub grupy bitów i podjęcia decyzji na podstawie ich wartości.
  • Pomocny post
    #6 16051005
    ASMnauka_
    Poziom 15  
    Witaj Lulubella.
    Co prawda zbyt wiele Ci nie pomogę (sam sie uczę ASM), ale jednak lepsze coś niż nic.
    A więc zacznijmy od początku.
    Niezbędnym dla rozwiązania Twego problemu jest utworzenie tablicy 100-tu element owej w pamięci flash mikrusa.
    Oto ta tablica
    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod

    .org $2500 oznacza umieszczenie tablicy od adresu 2500 * 2
    Teraz przyszedł czas na odczytanie zawartości tablicy.
    A można zrobić to tak:
    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod

    Do pary rejestrów R30-R31 ładujemy adres naszej tablicy.
    Do rejestru R16 ładujemy wartość licznika pętli.
    W rejestrze R0 mamy interesującą nas liczbę od 99 do 0 zawartą w tabeli.
    I proszę bardzo, oto pomocny link.
    Pozdrawiam
  • REKLAMA
  • #7 16051029
    BlueDraco
    Specjalista - Mikrokontrolery
    ASMnauka_ napisał:
    Niezbędnym dla rozwiązania Twego problemu jest utworzenie tablicy 100-tu element owej w pamięci flash mikrusa.

    A po co komu tablica o oczywistej zawartości? I dlaczego elmenty tej tablicy mają wartości zapisane szesnastkowo, a nie po prostu dziesiętnie?
  • #8 16051030
    kamyczek
    Poziom 38  
    Tyle że ta tablica jest we flash nie w ramie ;)
  • #9 16051047
    ASMnauka_
    Poziom 15  
    BlueDraco napisał:

    A po co komu tablica o oczywistej zawartości? I dlaczego elmenty tej tablicy mają wartości zapisane szesnastkowo, a nie po prostu dziesiętnie?

    Lulubella napisał:

    Muszę wykonać program filtrujący dane z tablicy n=100 elementowej, o wartościach od 99 do 0, do innej, obie zapisane w pamięci SRAM.

    Dla mnie nie ma znaczenia w jakiej postaci są zapisane elementy w tablicy.
    A po za tym może byś pomógł autorce tematu, a nie tylko zadawał pytania ?
    Jak widzę nie tylko Ty masz kłopoty z czytaniem ze zrozumieniem.
    kamyczek napisał:
    Tyle że ta tablica jest we flash nie w ramie ;)

    Nie ma problemu.
    Ustawia początek zapisu w pamięci SRAM za pomocą rejestrów R24-R25, lub R26-R27.
    W pętli z rejestru R16 pobiera wartość licznika i zapisuje ją począwszy od wybranego adresu za pomocą ST.
  • Pomocny post
    #10 16051143
    ASMnauka_
    Poziom 15  
    Lulubella proszę, oto przykład kopiowania z flash do sram pisany na mikrusa XMega.
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Dodano po 23 [minuty]:

    Lulubella napisał:

    − liczby dla których bit B3=0,
    − liczby dla których bit B3=1 i B1=0,
    − liczby dla których bit B3=1 lub B1=0,

    W tych przypadkach w zupełności wystarczy SBRC i SBRS
    Można i tak:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #11 16051488
    tronics
    Poziom 38  
    Lulubella napisał:
    nie, to nie jest zadanie domowe. Robię to z własnej woli. Tak, próbowałam coś w tej kwestii zrobić - inaczej nie pisałabym na forum.

    Kierowałem się konkretnie tym:
    Cytat:
    Od niedawna na zajęciach przerabiamy ATMega8. Pierwszy raz mam styczność z programowaniem niskopoziomowym i nie mam pojęcia jak rozwiązać konkretne zadanie

    Próby rozwiązania jednak na forum nie umieściłaś do czego zobowiązuje regulamin. Dodatkowo nie rozumiem próby rozwiązania opcjonalnego zadania (skoro z własnej woli a nie przymusu) co do rozwiązania którego nie ma się żadnej wiedzy. Z własnej woli należałoby sięgnąć po AVR ISA i dowiedzieć się jakie są rozkazy i co robią.
    Lulubella napisał:
    Jeśli interesujesz się psychologią człowieka i ocenianiem go po dwóch wpisach na forum to polecam inne strony.
    Interesuję się merytoryczną dyskusją, ze strony osoby proszącej o pomoc oczekuję zaangażowania. A koleżanko nawet nie postarałaś się logiki filtrów przedstawić. Zamysłu programu. Czegokolwiek. Tylko przedstawienie problemu do rozwiązania. To ZA MAŁO!
    @ASMnauka_ - posiedzisz dłużej na forum to zrozumiesz, że pomoc w nauczeniu się czegoś nigdy nie jest osiągalna przez "gotowca". Najlepsze efekty daje odpowiednie ukierunkowanie samego zainteresowanego na rozwiązanie (samodzielnie) problemu.
  • #12 16051611
    Lulubella
    Poziom 2  
    Już gotowe. Dziękuję wszystkim, którzy pomogli i przepraszam za wywołanie zamieszania. :D Miłego wieczoru!


    Moderowany przez dondu:

    Temat uporządkowałem usuwając zbędne posty.

REKLAMA