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.

[MCS-51][ASM]Zapalenie diody LED - różne drogi do celu.

zomo1986 18 Gru 2011 08:59 2246 1
  • #1 18 Gru 2011 08:59
    zomo1986
    Poziom 1  

    Witam
    Czy ktoś, może mi wytłumaczyć różnice w podanych programach :?:
    Służą one do zaświecania diod, w układzie mikrokontrolera 8051

    Program1

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    Wydzieliłem z innego tematu.
    Proszę zapoznać się z regulaminem naszego forum.
    [zumek]

    0 1
  • #2 18 Gru 2011 13:08
    kemot55
    Poziom 30  

    P1:
    Odwołujesz się do pojedynczej linii portu P1.6 i tylko ją zerujesz. Dioda się zapali o ile będzie sprawna i odpowiednio podłączona do tej linii portu.
    P2:
    Kod wynikowy identyczny z P1 tylko linię portu P1.6 nazywasz "LED" - lepiej się pisze program. Przy 4 portach mamy 32 linie i pamiętanie "na cyferkach" co gdzie jest podpięte może co najwyżej doprowadzić do zdenerwowania jak nic nie działa.
    P3:
    Robisz sobie definicję 8 bitów na porcie P1. Rozkaz zapisuje bajt do portu - czyli ustawia za jednym zamachem 8 linii tego portu. Dioda też się zaświeci. Z tym, że w czasach 8051 (a może i teraz) niezłym atutem tego procka była możliwość sterowania pojedynczymi bitami a nie kombinowanie AND OR NOT i co tam jeszcze (jak to jest np. w "superriscowych-złomach" nazywanych AVR'ami)
    P4:
    Znów definiowany jest stan 8 bitów, ale na porcie wykonywana jest operacja AND. Czyli następuje odczyt portu P1 i AND stanu tego portu z Twoją definicją LED_ON. Twoja definicja jest maską i wszystkie bity mające wartość zero spowodują wyzerowanie adekwatnych linii portu (w tym przypadku tylko P1.6 się wyzeruje). Inne linie pozostają w stanie takim w jakim były.
    P5:
    Ten program włączy i wyłączy diodę (bardzo szybko, w zasadzie widać to będzie tylko na oscyloskopie). Cykl będzie powtarzany w nieskończoność.
    P6:
    To jest program cudownie przewymiarowany. Robi dokładnie to co P5 tylko tak jak by to nie była 51 tylko AVR. Najpierw AND z maską _ON (wyzerowanie bitu 6) a następnie OR z maską _OFF (ustawienie bitu 6).

    Generalnie zapis ORG 100H jest zbędne w tych programach. Nie używasz przerwań więc program może zacząć się od zera (skoki LJMP START też prowadzą do przerostu formy nad treścią). A w ogóle to sprawdź czy Twój assembler nie może sobie sam optymalizować skoku (czyli czy może sam sobie wybierać długość skoku SJMP, AJMP czy LJMP) - wtedy zamiast konkretnej instrukcji pisze się "JMP" lub "CALL" (ale jak pamiętam nie wszystkie assemblery były mądre :-))

    0