Advertisement
czaru34

dwajedenass

Jan 14th, 2020
1,066
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .include "m32def.inc"
  2. //Pt12 Cezary Zaprawa, Zadanie 1 środkowe diody świecą, rozchodzą sie na zewnątrz. Jeśli dotrą do
  3. //końca, wracają (świecą się maksymalnie dwie diody).
  4. init: ; inicjalizacja programu
  5.     ser R16 ; wypełniam rejestr r16 jedynkami
  6.     out DDRB, R16 ; ustawiam PORTB na wyjście
  7.     ldi r26, high(ramend) ;
  8.     out sph, r26 ;
  9.     ldi r26, low(ramend) ;
  10.     out spl, r26 ; inicjalizacja wskaźnika stosu
  11.     sbr r17, 0b10000001 ; maska, która pozwala na sprawdzenie aktualnej sekwencji diod
  12. main: ; pętla główna programu
  13.     clt
  14.     clr R29 ;
  15.     clr R30 ;
  16.     clr R31 ; przygotowanie rejestrów, na których będę operować
  17.     out PORTB, R29 ; wyzerowanie PORTB
  18.     sbr R30, 0b00001000 ; ustawienie pierwszego rejestru (lewa strony linijki led)
  19.     sbr R31, 0b00010000 ; ustawienie drugiego rejestru (prawa strona linijki led)
  20.  
  21.     ldi R27, 7
  22.     mainloop:
  23.         brts pc+4
  24.         call roll
  25.         brtc pc+2
  26.         call rorr
  27.         call light
  28.         dec r27
  29.         brne mainloop
  30.     rjmp main ; skok do pętli głównej
  31. roll: ; procedura odpowiada za rotację bitów w pierwszej fazie świecenia (od środka -> na zewnątrz)
  32.     lsl R30 ; rotuję bit w rejestrze odpowiadającym za lewą stronę linijki diod led w lewą stronę
  33.     lsr R31 ; rotuję bit w rejestrze odpowiadającym za prawą stronę linijki diod led w prawą stronę
  34.     ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
  35. rorr: ; procedura odpowiada za rotację bitów w drugiej fazie świecenia (od zewnątrz -> do środka)
  36.     lsr R30 ; rotuję bit w rejestrze odpowiadającym za lewą stronę linijki led w prawą stronę
  37.     lsl R31 ; ; rotuję bit w rejestrze odpowiadającym za prawą stronę linijki led w lewą stronę
  38.     ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
  39. light: ; procedura, która zapala diody z opóźnieniem
  40.     clr r29
  41.     or R29, R30 ;
  42.     or R29, R31 ; za pomocą operacji OR ustawiam w rejestrze R29 bity z rejestrów R30 i R31
  43.     cp r29, r17
  44.     brne lighton
  45.     set
  46.     lighton:
  47.     out PORTB, R29 ; ustawiam bity w PORTB (zapalam diody)
  48.     //call delay ; po zaświeceniu następuje opóźnienie
  49.     ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
  50. delay: ; procedura opóźniająca
  51.     ldi R18, 10 ;
  52.     ldi R19, 115 ;
  53.     ldi R20, 10 ; ładowanie stałych do rejestrów
  54.     ret
  55. loop: ; pętla odpowiadająca za wykonywanie operacji opóźnienia
  56.     dec R18 ; dekrementacja R18
  57.     brne loop ; skok do loop, jeśli wartość w rejestrze jest != 0
  58.     dec R19 ; dekrementacja R19
  59.     brne loop ; skok do loop, jeśli wartość w rejestrze jest != 0
  60.     dec R20 ; dekrementacja R20
  61.     brne loop ; skok do loop, jeśli wartość w rejestrze jest != 0
  62.     ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement