LED diody jsou v tomto případě zapojeny anodou na plus, takže ji rozsvěcujeme logickou nulou.
Obr. 1: Schematická značka LED
Základní program pro rozsvícení 8 LED ( 1 – zhasnutá , 0 – rozsvícená).
Na port P1 připojíme 8 LED (7. - 0.)
1. úroveň - program se opakuje stále dokola:
L1S - rozsvícení a zhasnutí všech LED v intervalu 1s
SEM: MOV P1,#00000000b ; rozsvícení všech LED
CALL DEL1S ; podprogram časového zpoždění 1s
MOV P1,#11111111b ; zhasnutí všech LED
CALL DEL1S ; podprogram časového zpoždění 1s
JMP SEM ; zacyklení progr,. opakování dokola
INCLUDE(DELAY.INC) ; vložení podprogramu čas.zpož.
END ; ukončení překladu
Podprogram časového zpoždění DELAY.INC nabízí několik časových smyček, odpovídajících návěstím.
DEL1S délka 1 sekundy
DEL800 délka 0,8 s
DEL400 délka 0,4 s
DEL200 délka 0,2 s
DEL100 délka 0,1 s
DEL1MS délka 1 ms
Instrukcí ACALL (používáme CALL) vyvoláme podprogram, který musí být ukončen instrukcí RET- návrat z podprogramu - viz dále.
Časové smyčky jsou potřebné, protože délka jedné instrukce je kolem 1- 3 mikrosekund (oko by tuto změnu nezaznamenalo).
L400 - rozsvícení a zhasnutí všech LED v intervalu 400 ms na portu P1.
SEM: MOV P1, #00000000B ; rozsvícení všech LED
CALL DEL400 ; časová smyčka 400 ms
MOV P1, #11111111B ; zhasnutí všech LED
CALL DEL400 ; časová smyčka 400 ms
JMP SEM ; zacyklení – skok na návěstí
INCLUDE (DELAY.INC) ; vložení podprogramu čas. zpoždění
L800 - rozsvícení a zhasnutí všech LED v intervalu 800 ms.
SEM: MOV P1, #00000000B ; rozsvícení všech LED
CALL DEL800 ; časová smyčka 800 ms
MOV P1, #11111111B ; zhasnutí všech LED
CALL DEL800 ; časová smyčka 800 ms
JMP SEM ; zacyklení – skok na návěstí
INCLUDE (DELAY.INC) ; vložení podprogramu čas.zpož.
HAD1- rozsvěcování LED postupně od nejvyšší k nejnižší (po 1 LED) v intervalu 100 ms.
SEM: MOV P1, #01111111B ; rozsvícení 7. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #10111111B ; rozsvícení 6. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #11011111B ; rozsvícení 5. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #11101111B ; rozsvícení 4. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #11110111B ; rozsvícení 3. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #11111011B ; rozsvícení 2. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #11111101B ; rozsvícení 1. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1,#11111110B ; rozsvícení 0. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #00000000B ; rozsvícení všech LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #11111111B ; zhasnutí všech LED
CALL DEL100 ; časová smyčka 100 ms
JMP SEM ; zacyklení – skok na návěstí
INCLUDE (DELAY.INC) ; vložení podprogramu čas.zpoždění
END ; ukončení překladu
HAD2 postupné rozsvěcování LED od 7. po 0.
SEM : MOV P1, #01111111B ; rozsvícení 7. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #00111111B ; rozsvícení 7.6. LED
CALL DEL100 ; časová smyčka 100 ms
MOV P1, #0001111B ; rozsvícení 7.6.5. LED
CALL DEL100
MOV P1, #00001111B ; rozsvícení 7.6.5.4. LED
CALL DEL100
MOV P1, #00000111B ; rozsvícení 7.6.5.4.3. LED
CALL DEL100
MOV P1, #00000011B ; rozsvícení 7.6.5.4.3.2. LED
CALL DEL100
MOV P1, #00000001B ; rozsvícení 7.6.5.4.3.2.1. LED
CALL DEL100
MOV P1, #00000000B ; rozsvícení 7.6.5.4.3.2.1.0. LED
CALL DEL100
MOV P1, #11111111B ; zhasnutí všech LED
CALL DEL100
JMP SEM ; zacyklení – skok na návěstí
INCLUDE (DELAY.INC) ; vložení podprogramu čas.zpoždění
L4C1 - rozsvícení a zhasnutí všech LED v intervalu 400 ms.
Zcyklení na místě - program se provede jen jednou.
MOV P1, #00000000B ; rozsvícení všech LED
CALL DEL400 ; časová smyčka 400 ms
MOV P1, #11111111B ; zhasnutí všech LED
CALL DEL400
SEM: JMP SEM ; zacyklení – skok na návěstí
INCLUDE (DELAY.INC) ; vložení podprogramu čas.zpož.
END ; ukončení překladu
Program se provede X krát.
Počet opakování programu se provádí pomocí instrukce DJNZ Rn, Rel, která je složena ze dvou instrukcí DECREMENT JUMP NO ZERO (odečti jedna z registru Rn a ptej se, jestli je registr nulový. Pokud ne, skoč na dané návěstí, pokud ano, jdi na další následující instrukci). Počet registrů je 8 , R7 - R0 (pro jednu registrovou banku - možno použít 4 registrové banky RB0 - RB3)
L4C5- rozsvícení a zhasnutí všech LED v intervalu 400 ms 5x zopakuj.
MOV R1, #5 ; počet opakování programu X = 5
HOP : MOV P1, #00000000B ; rozsvícení všech LED
CALL DEL400 ;časová smyčka 400 ms
MOV P1, #11111111B ; zhasnutí všech LED
CALL DEL400
DJNZ R1, HOP ; opakuj dokud registr R1 není 0
SEM : JMP SEM ; zacyklení na místě
INCLUDE (DELAY.INC) ; vložení podprogramu čas.zpož.
Číslo v registru R1 nám udává, kolikrát se má program zopakovat (v složitějších programech hlídej čísla registrů, aby se nepřepisovala).