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

program dla procesora z rodziny MCS 51, czy jest poprawny ?

26 Kwi 2009 22:28 1595 2
  • Poziom 1  
    Witam, zwracam się z serdeczną prośbą o pomoc, mam stworzyć i "obronić" program w takim symulatorze: http://www.g.bialic.po.opole.pl/teaching/_8051/symulator.exe
    jego treść jest następująca:

    Do rejestru B należy wpisać dzień swoich imienin (dla mnie ten dzień to 29). Następnie przepisać jego wartość do pamięci adresowanej bitowo (adres 22h) – bit po bicie. Kolejnym etapem jest zamiana starszych czterech bitów rejestru B z młodszymi. Uzyskaną wartość należy skopiować dwudziestokrotnie do pamięci w segmencie DATA od adresu 80h.

    Stworzyłem go (przyznaje bez bicia, że przez analogię do innego podobnego programu). Niestety nie wiem czy jest to prawidłowo napisany program, czy spełnia wszystkie założenia, prosił bym serdecznie o sprawdzenia poprawności kodu i mojego......"rozumowania" programu, o ewentualne poprawki. Za wszelkie sugestie jestem bardzo wdzięczny, gdyż moja wiedza z tego zakresu jest bardzo niewielka. Poniżej załączam kod:
    Code:

    BSEG AT 08h
    DZIEN: DBIT 8

    CSEG AT 8000h
    MOV B,#29 ;dzien czerwcowych imienin

    clr C

    mov 22h,B

    mov C,B.0
    mov DZIEN,C

    mov C,B.1
    mov DZIEN+1,C

    mov C,ACC.2
    mov DZIEN+2,C

    mov C,B.3
    mov DZIEN+3,C

    mov C,B.4
    mov DZIEN+4,C

    mov C,B.5
    mov DZIEN+5,C

    mov C,B.6
    mov DZIEN+6,C

    mov C,B.7
    mov DZIEN+7,C

    clr C

    MOV C,B.0
    MOV 22h,C
    MOV C,B.4
    MOV B.0,C
    MOV C,22h
    MOV B.4,C

    MOV C,B.1
    MOV 22h,C
    MOV C,B.5
    MOV B.1,C
    MOV C,22h
    MOV B.5,C

    MOV C,B.2
    MOV 22h,C
    MOV C,B.6
    MOV B.2,C
    MOV C,22h
    MOV B.6,C

    MOV C,B.3
    MOV 22h,C
    MOV C,B.7
    MOV B.3,C
    MOV C,22h
    MOV B.7,C


    ;mov C,B.1 ;kopiuje 2 bit B do C
    ;mov 20.0h,C ;kopiuje C tymczasowo do pamieci RAM adresowanej bitowo
    ;mov C,B.4 ;kopiuje 4 bit B do C
    ;mov ACC.1,C ;kopiuje C (czyli 4 bit B) do 2 bitu B
    ;mov C,20.0h ;kopiuje ze "schowka" zawartowsc 2 bitu B
    ;mov B.4,C ;kopiuje C (czyli 2 bit B) do 4 bitu B
    ; GDYBY ZAPISANE TO BYŁO W AKMULATORZE MOZNA UZYC POLECENIA SWAP A

    mov R0,#80h
    mov R7,#20

    KOPIUJ:
    mov @R0,B
    inc R0
    DJNZ R7,KOPIUJ

    END
  • Poziom 22  
    Witam
    Nie najlepiej wygląda ta pierwsza część. Powinieneś zrobić coś takiego.

    Code:

    MOV B,#29  ;ZAŁADOWANIE REJESTRU B

    MOV C,B.0   ;PRZEPISYWANIE
    MOV 22,C    ;bit po bicie
    MOV C,B.1
    MOV 23,C
    MOV C,B.2
    MOV 24,C
    MOV C,B.3
    MOV 25,C
    MOV C,B.4
    MOV 26,C
    MOV C,B.5
    MOV 27,C
    MOV C,B.6
    MOV 28,C
    MOV C,B.7
    MOV 29,C
    ;zamiana starszych czterech bitów rejestru B z młodszymi
    ;NIE JEST NAPISANE JAK WIĘC IDZIEMY PO NAJMNIEJSZEJ LINII OPORU

    MOV A,B
    SWAP A
    MOV B,A

    ;TO WYGLĄDA PRZYZWOICIE WIĘC PRZEPISUJEMY

    mov R0,#80h
    mov R7,#20

    KOPIUJ:
    mov @R0,B
    inc R0
    DJNZ R7,KOPIUJ
    JMP $
    END


    Jeżeli koniecznie chciałbyś użyć parametryzowania to na początku należy zadeklarować
    Code:
    DZIEN BIT 22

    i zamiast podawać bezpośrednio
    Code:
    MOV 22,C

    Możesz napisać
    Code:
    MOV DZIEN,C
    
    ......
    MOV DZIEN+1,C
    ........

    Nie sprawdzałem tego w tym symulatorze, zostawiam to Tobie.
    Pozdrawiam
  • Poziom 1  
    Dziękuję za link, taki przykład to już coś na czym laik może pokombinować. Bardzo bym był zadowolony gdyby zamiast określeń (akumulator, rejestr, kopiowanie, przesuwanie, skok itp) opisać te operacje na konkretnym przypadku urządzenia które realizuje tego typu prosty algorytm.