Aplikace rotace registru pro běžící světlo s LED diodami

Využití logické instrukce rotace

Než začneme s dalším modulem, vrátíme se na chvíli k LED a ukážeme si využití logických instrukcí RR A, RL A a SWAP A. Zatím jsme program rotace (posun) LED vytvořili pouhým vypsáním dat na port. Program je možno velmi elegantně vyřešit pomocí instrukce rotace. Jedinou nevýhodou je, že nelze rotovat přímo portem, ale jen akumulátorem - hlavním registrem A. Pro stejný efekt použijeme rotaci doprava RR A.

         MOV P1,#01111111B                  ; načtení prvních dat - rozsvícení 7. LED

         CALL DEL100                              ; zobrazení dat

         MOV A,P1                                   ; přesun portu do akumulátoru

 HUP:      RR A                                     ; rotace akumulátoru doprava

         MOV P1,A                                   ; výsledek rotace přesuň do portu P1

         CALL DEL100                             ; zobraz výsledek

         JMP HUP                                   ; opakuj stále dokola

         Include (DELAY.inc)

          END

Tento program rotuje stále dokola. My však již umíme počet rotací omezit.

           MOV R1,#7                      ; počet opakování rotací

           MOV P1,#01111111B        ; načtení prvních dat -rozsvícení 7.LED

           CALL DEL100                   ; zobrazení dat

           MOV A,P1                        ; přesun portu do akumulátoru

           HUP: RR A                               ; rotace akumulátoru doprava

           MOV P1,A                       ; výsledek rotace přesuň do portu P1

           CALL DEL100                  ; zobraz výsledek

           DJNZ R1,HUP                 ; opakuj, dokud není R1 nulový

           MOV P1,#11111111B      ; zhasnutí všech LED

           HAP:    JMP HAP                         ; zacykli na místě

           Include(DELAY.inc)

           END

Pomocí podprogramů zrealizujme rotaci LED zleva doprava (od pozice 7. do pozice 0.) a následovně zprava doleva (od 0. pozice do 7. pozice).

Hlavní program:

         CALL ROTR                              ; rotace zleva doprava

         CALL ROTL                               ; rotace zprava doleva

         S: JMP S

         ROTR:   MOV R1,#7                               ; počet opakování rotací

         MOV P1,#01111111B                ; načtení prvních dat - rozsvícení 7.LED

         CALL DEL100                           ; zobrazení dat

         MOV A,P1                                ; přesun portu do akumulátoru

         HUP: RR A                                        ; rotace akumulátoru doprava

         MOV P1,A                                ; výsledek rotace přesuň do portu P1

         CALL DEL100                           ; zobraz výsledek

         DJNZ R1,HUP                          ; opakuj, dokud není R1 nulový

         RET

 

         ROTL: MOV R1,#7                              ; počet opakování rotací

         MOV A,P1                                ; přesun portu do akumulátoru

         HUP: RL A                                         ; rotace akumulátoru doprava

         MOV P1,A                                ; výsledek rotace přesuň do portu P1

         CALL DEL100                           ; zobraz výsledek

         DJNZ R1,HUP                           ; opakuj, dokud není R1 nulový

         RET

         Include(DELAY.inc)

         END

Pokud bychom chtěli rotaci opakovat stále dokola, přemístíme jen návěstí hlavního programu na první řádek.

      S:CALL ROTR                                ; rotace zleva doprava

         CALL ROTL                                ; rotace zprava doleva

         JMP S

Umíme také omezit počet opakování celého hlavního programu.

Zajímavostí je instrukce SWAP A, která provede najednou 4 rotace.

Ve skutečnosti tato instrukce přehodí dolní polovinu bytu s horní polovinou bytu akumulátoru.

S touto instrukcí se dají naprogramovat pěkné efekty s LED.

Zdroje
  • VESELÁ, Zuzana. Mikroprocesorová technika. Interní skriptum, VOŠ a SPŠE Olomouc. 2013
Doplňující učivo

Vyzkoušej instrukci SWAP k prohození dolní a horní poloviny bytu. Využij rozsvícení 8 LED diod vždy po čtyřech.