Obsluha portu s LED diodami

LED diody jsou v tomto případě zapojeny anodou na plus, takže ji rozsvěcujeme logickou nulou.

obrazek

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).

Zdroje
  • VESELÁ, Zuzana. Mikroprocesorová technika. Interní skriptum, VOŠ a SPŠE Olomouc. 2013

Obrázky​:

  • Obr. 1 - 3: Archiv autora
Doplňující učivo

V jiném hardware můžeš zapojit LED tak, že ji rozsvěcuješ logickou "1".

Obrázek

Obr. 2: 8x LED v řadě (1 byte)

Obrázek

Obr. 3: Různé typy a barvy LED