Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .include "m32def.inc"
- //Pt12 Cezary Zaprawa, Zadanie 1 środkowe diody świecą, rozchodzą sie na zewnątrz. Jeśli dotrą do
- //końca, wracają (świecą się maksymalnie dwie diody).
- init: ; inicjalizacja programu
- ser R16 ; wypełniam rejestr r16 jedynkami
- out DDRB, R16 ; ustawiam PORTB na wyjście
- ldi r26, high(ramend) ;
- out sph, r26 ;
- ldi r26, low(ramend) ;
- out spl, r26 ; inicjalizacja wskaźnika stosu
- sbr r17, 0b10000001 ; maska, która pozwala na sprawdzenie aktualnej sekwencji diod
- main: ; pętla główna programu
- clt
- clr R29 ;
- clr R30 ;
- clr R31 ; przygotowanie rejestrów, na których będę operować
- out PORTB, R29 ; wyzerowanie PORTB
- sbr R30, 0b00001000 ; ustawienie pierwszego rejestru (lewa strony linijki led)
- sbr R31, 0b00010000 ; ustawienie drugiego rejestru (prawa strona linijki led)
- ldi R27, 7
- mainloop:
- brts pc+4
- call roll
- brtc pc+2
- call rorr
- call light
- dec r27
- brne mainloop
- rjmp main ; skok do pętli głównej
- roll: ; procedura odpowiada za rotację bitów w pierwszej fazie świecenia (od środka -> na zewnątrz)
- lsl R30 ; rotuję bit w rejestrze odpowiadającym za lewą stronę linijki diod led w lewą stronę
- lsr R31 ; rotuję bit w rejestrze odpowiadającym za prawą stronę linijki diod led w prawą stronę
- ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
- rorr: ; procedura odpowiada za rotację bitów w drugiej fazie świecenia (od zewnątrz -> do środka)
- lsr R30 ; rotuję bit w rejestrze odpowiadającym za lewą stronę linijki led w prawą stronę
- lsl R31 ; ; rotuję bit w rejestrze odpowiadającym za prawą stronę linijki led w lewą stronę
- ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
- light: ; procedura, która zapala diody z opóźnieniem
- clr r29
- or R29, R30 ;
- or R29, R31 ; za pomocą operacji OR ustawiam w rejestrze R29 bity z rejestrów R30 i R31
- cp r29, r17
- brne lighton
- set
- lighton:
- out PORTB, R29 ; ustawiam bity w PORTB (zapalam diody)
- //call delay ; po zaświeceniu następuje opóźnienie
- ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
- delay: ; procedura opóźniająca
- ldi R18, 10 ;
- ldi R19, 115 ;
- ldi R20, 10 ; ładowanie stałych do rejestrów
- ret
- loop: ; pętla odpowiadająca za wykonywanie operacji opóźnienia
- dec R18 ; dekrementacja R18
- brne loop ; skok do loop, jeśli wartość w rejestrze jest != 0
- dec R19 ; dekrementacja R19
- brne loop ; skok do loop, jeśli wartość w rejestrze jest != 0
- dec R20 ; dekrementacja R20
- brne loop ; skok do loop, jeśli wartość w rejestrze jest != 0
- ret ; powrót do pętli odpowiadającej za zmianę oświetlenia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement