Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program jak i w czym go napisać?

mateuszkiek 12 Mar 2007 13:38 2592 5
  • #1 12 Mar 2007 13:38
    mateuszkiek
    Poziom 15  

    Tematy ćwiczeń z przykłady zadań (szczegółową treść zadań określa prowadzący zajęcia)
    (Cwiczenia wykonywane na zestawie dydaktycznym ZD 537,)
    Temat 1 — MIKROKONTROLER 8051 - struktura, pamięci, proramowanie
    Cel — pomanie podstaw owych modułów mikrokomputera i jego struktury rejestrowej, poznanie struktury programu asemblerowego, umiejętność pisania prostych programów wjęzyku asemblera - organizacja pętli, operacje na tablicach, tryby adresowania pamięci.
    Zadania: (Opracować i uruchomić)
    1. Procedury kopiowania (k. proste lub rozszerzone o dodatkowe operacje na kopiowanych danych,
    np. poszukiwanie wzorca, itp.) zbioru danych a) w obrębie określonej pamięci, b) między różnymi typami
    pamięci.
    2. Program realizujący proste operacje arytmetyczne na tablicach danych tworzonych w zadaniu 1.
    3. Procedury konwersji liczb, np. NKB 4 BCD8421 „ NKB4 ASCII,



    Mam narazie jakiś kurs asemblera, lecz na czym to przetestować?
    We wtorek bedzie decydująca chcwila, przy nauczycielu.


    Pozostałe ważne informacje:
    Plik PDF Wszystkie zadania
    Drugi plik KK hasło do pliku: PTM

    Moderowany przez McRancor:

    Usunąłem link do "Programu do laborek", ostrzeżenie za link do nielegalnego oprogramowania.



    Dziekuje za wyrozumialość.
    Pozdrawiam.

    0 5
  • Pomocny post
    #2 12 Mar 2007 13:54
    markosik20
    Poziom 33  

    To zależy jakiego asemblera się uczycie. Jak do '51 to możesz sobie złożyć lub kupić gotowe modułu uruchomieniowe (na allegro ich pełno), jak do do AVR'a to tak samo tylko inny uC.

    0
  • #3 12 Mar 2007 18:16
    mateuszkiek
    Poziom 15  

    ZAD. 1. Przygotować i uruchomić programy w języku asemblera 8051:
    a) kopiowania N-bajtowego obszaru TABL 1 z pamięci kodu do pamięci wewnętrznej DATA (obszar
    TABL2),
    b) kopiowania bit po bicie w pamięci DATA fragmentu danych z obszaru TABL2, a następnie bajt po bajcie i utworzenie obszaru TABL3
    c) kopiowania obszaru TABL2 do zewnętrznej pamięci XDATA (obszar TABL4),
    przy czym
    - obszarem źródłowym w pamięci CODE jest tablica TABL 1 utworzona jako dane w programie,
    - obszar docelowy TABL2 w pamięci DATA obejmuje komórki adresowane bitowo i bajtowo,
    - obszar TABL4 w pamięci XDATA, adres początku obszaru może być dowolny,
    - przy kopiowaniu TABL2 do TABL4
    a) dane kopiowane podlegają filtrowaniu zastępuje się bajty z cechą X bajtami Y, albo
    b) wyszukuje bajt z cechą Z i zlicza ich liczbę w kopiowanym zbiorze, wynik w rejestrze R7
    ZAD.2. Przygotować i uruchomić program(y) w języku asemblera 8051 realizujący(e) operacje arytmetyczne na danych zawartych w zbiorach DANE1 i DANE2. Program umieszcza wyniki tych operacji w obszarach o nazwach: SUMx, ROZx, MNOx, ILOx jako wyniki odpowiednio dodawania, odejmowania, mnożenia i dzielenia. Tutaj indeks x wskazuje na system zapisu liczb, odpowiednio: x b liczby całkowite bez znaku, x=w liczby całkowite ze znakiem w kodzie U2.
    Uwaga:
    - obszary DANE 1 i DANE2 zostają utworzone w pamięci CODE i określone w ciele programu,
    - obszary SUMx, ROZx, MNOx, ILOx mają być tworzone w pamięci XDATA.
    1
    I/STR ONA 2 i V4 TĘPNE//
    REALIZACJA ZE”\JJC H.
    ad. ZAD.1.
    Założenia wstępne: przy opracowywaniu programu kopiowania przyjęto:
    - obszary TABL 1 (źródłowy) zawiera 9 bajtów — kody ASCII liter (cyJ, liczb); dane TABL 1 zapisane w treści programu,
    - adres początkowy TABŁ2 = 2EH; dwa bajty w obszarze adresowanym bitowo, pozostałe w obszarze adresowanym bajtowo pamięci DATA,
    - adres początkowy obszaru TABL3 — dowolny z zakresu 30H — 77H (8051) lub F7H (80357 — obszar górnej DATA),
    - adres początkowy TABL4 OO1OH w XDATA,
    - kopiowanie z TABL2 do TABL4 (z dodatkową operacją poszukiwania minimum (NKB) w kopiowanym zbiorze bajtów - podpunkt h), znalezione minimum zapamiętano w rejestrze R7 a liczbę bajtów o tej wartości w rejestrze R6.).
    Rozmieszczenie poszczególnych obszarów i kierunek ich kąpiowaniapokazanonąrysunku
    tutaj rysunek ilustrujący kopiowane obszar
    Rys. 1. Szkic rozmieszczenia kopiowanych danych i kierunki kopiowania
    Zadania kopiowania (Rys. 1) zrealizowano według algorytmu, którego sieć działań pokazano na rysunku 2 - implementacją algorytmu w języku asemblera 8051 jest plik KOPI A5 1 (dyskietka „Labflituj rysunek sieci działań algorytmu kopiowania
    Rys.2. Schemat blokowy realizowanego algorytmu
    itd.
    ad. ZAD.2.
    UWAGI I WNIOSKI
    ad. ZAD.1
    Program KOPI .A51 (zamieszczony na dyskietce „Lab-PTM grupy ...„) realizuje wszystkie wymagania ... „albo ... punkty a) i h) ... zadania ZAD. 1.
    W programie kopiowania użyto
    ) adresowania bitowego — oznaczono w komentarzu programu jako fragment XX ) adresowania bajtowego
    pośredniego — fragment XP
    bezpośredniego — fragment XB
    bazowo-indeksowego — fragment XBI
    Ponadto zbadano możliwość kopiowania danych do górnego obszaru pamięci DATA (pamięć dostępna w 80537) — dot. adresów ... „ patrz fragment XG - stwierdzono, że
    ...itd.


    Jak powinien wyglądać ten kod asemblera?
    Pozdrawiam.

    0
  • Pomocny post
    #4 12 Mar 2007 22:52
    markosik20
    Poziom 33  

    Cytat:
    Jak powinien wyglądać ten kod asemblera?

    Czyżby kolega oczekiwał na jakiegoś "gotowcika" :):)
    Może lepiej zrobić tak: kolega napisze a my sprawdzimy :):)
    No jakieś podstawy na lekcji na pewno były.

    0
  • #5 13 Mar 2007 21:05
    mateuszkiek
    Poziom 15  

    [quote="markosik20"Może lepiej zrobić tak: kolega napisze a my sprawdzimy :):)
    No jakieś podstawy na lekcji na pewno były.[/quote]


    Code:
    $NOMOD51
    
    $INCLUDE(REG517.INC)
    CSEG AT 0

    MOV R0, #0       ;ZERUJ R0
    MOV DPTR, #TAB1   ;DPTR<-ADRES POCZATKOWY TAB1   
    MOV R7, #5       ;R7<-LICZNIK PETLI
    MOV R0, #30H    ; R0<-30H      kopia TAB1 bedzie zaczynala sie od adresu 30h

    PETLA:
    CLR A
    MOVC A,@A+DPTR      ;A<- DPTR+ZAWARTOSC KOMORKI KTOREJ ADRES JEST W ACC
    MOV @R0, A            ;PRZESLIJ ZAWARTOSC ACC DO KOMORKI KTOREJ ADRES W R0
    INC R0            ;INKREMENTUJ R0
    INC DPTR         ;INKREMENYUJ DPTR
    DJNZ R7,PETLA       ; JEZELI R7 == 0, TO PRZERYWA PETLE (JUMP IF NOT ZERO)

    MOV R1, #5Ah
    MOV R7, #6
    MOV DPTR, #0x8020
    kOPIUJX:
    CLR A
    MOV A, @R0
    MOVX @DPTR,A
    INC DPTR
    INC R1
    DJNZ R7,KOPIUJX


    JMP $
    TAB1: DB 5,7,11,17,34,8,23,19
    END


    Code:
    $NOMOD51
    
    $NOLIST
    $INCLUDE(REG517.INC)
    $LIST
    ile EQU 6
    CSEG AT 0
    START:
    MOV R1, #0
    MOV DPTR, #TAB1
    MOV R3, #ile
    MOV R1, #5Ah
    MTAB1:
    CLR A
    MOVC A,@A+DPTR
    MOV @R1, A
    INC R1
    INC DPTR
    DJNZ R3,MTAB1

    MOV R1, #0
    MOV DPTR, #TAB2
    MOV R3, #ile
    MOV R1, #62h
    MTAB2:
    CLR A
    MOVC A,@A+DPTR
    MOV @R1, A
    INC R1
    INC DPTR
    DJNZ R3,MTAB2
    MOV R3, #ile
    MOV R0, #5Ah
    MOV R1, #62h
    ;MOV DPTR, #72h

    DODAJ:
    CLR A
    MOV A, @R0
    ADD A, @R1
    MOV @R1, A
    INC R0
    INC R1
    ;INC DPTR
    DJNZ R3, DODAJ
    JMP $
    TAB1: DB 150,151,152,153,154,155
    TAB2: DB 155,154,153,152,151,150
    END



    Z pomocą kolegi z grupy wyszło coś takiego.
    Nie wiem czy ljest dobrze lecz kompilator przy pierwszym sie nie buntuje.

    Ptytanie co oznacza ta linijka:MOV DPTR, #0x8020
    #0x8020 - prześlij coś co znajduje sie pod adresm 8020?

    Pozdrawiam

    0
  • Pomocny post
    #6 13 Mar 2007 21:29
    olekewaagata
    Poziom 25  

    DPTR jest rejestrem składającym się z dwóch bajtów o oznaczeniu DPL i DPH. A więc ten rozkaz ładuje (umieszcza) tą wartość w rejestrze DPTR.

    0