Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .include "m32def.inc" ;dołączenie pliku z definicjami rejestrów
- .def Jeden = R16 ;przyporządkowanie rejestrowi R16 wartości Jeden
- .def Dwa = R17 ;przyporządkowanie rejestrowi R17 wartości Dwa
- ; REJESTRY OPOZNIENIA
- .def licznik1 = R18 ;przyporządkowanie rejestrowi R18 wartości licznik1
- .def licznik2 = R19 ;przyporządkowanie rejestrowi R19 wartości licznik2
- .def licznik3 = R20 ;przyporządkowanie rejestrowi R20 wartości licznik3
- .cseg ;segment pamięci programu
- .org 0x0000 ;podanie adresu początku programu - pamięć programu
- jmp Start ;skok do etykiety Start
- Start: ;etykieta Start
- ldi Dwa, HIGH(RAMEND) ;inicjacja 16 bitowego stosu , ładuj rejestr roboczy MSB adresu końca pamięci SRAM
- out SPH, Dwa ;inicjalizuj MSB wskaźnika stosu
- ldi Jeden, LOW(RAMEND) ;ładuj rejestr roboczy LSB adresu końca pamięci SRAM
- out SPL, Jeden ;inicjalizuj LSB wskaźnika stosu
- ldi Dwa, 0xFF ;zapisujemy w rejestrze Dwa same jedynki
- out DDRA, Dwa ; ustawiamy Port A jako wyjscie
- ldi Dwa, 0x00 ;zapisujemy w rejestrze Dwa same zera
- out DDRB, Dwa ;ustawiamy Port B jako wejście
- ldi Dwa, 0b00000011 ;zapisanie w rejestrze Dwa wartości 0b00000011
- out PORTB, Dwa ;piny 0 i 1 portu B ustawione jako wejście z rezystorami pull-up
- ldi R20, 253 ;zapisaujemy w rejestrze R20 wartość 0
- ldi R21, 255
- Klawisz1: ; etykieta Klawisz1
- sbic PINB, PINB0 ;sprawdzamy czy przycisk W1 został wciśnięty
- rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W1 nie zostanie wcisniety
- rcall Inkrementacja ;jesli przycisk W1 zostanie wcisniety pominie instrukcje skoku i przejdzie do inkrementacji
- Klawisz2: ;etykieta Klawisz2
- rcall Zapalenie ;jesli przycisk W2 zostanie wcisniety ominie instrukcje skoku i przejdzie do gaszenia
- nop
- rjmp Start ;powrot do poczatku programu
- Opoznienie5sec: ;program trwajacy 2 000 000 cykli(2 sec)
- ldi licznik3, 0x1A
- ldi licznik2, 0x5E
- ldi licznik1, 0x6F
- Petla:
- dec licznik1 ;zmiejszenie wartosci o 1
- brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
- dec licznik2 ;zmiejszenie wartosci o 1
- brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
- dec licznik3 ;zmiejszenie wartosci o 1
- brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
- nop
- nop
- ret ;wyjscie z podprogramu
- Inkrementacja:
- inc R20
- sub R21,R20
- sbrc R21, 1
- rjmp Klawisz2
- sbic PINB, PINB1 ;sprawdzamy czy przycisk W2 został wciśnięty
- rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W2 nie zostanie wcisniety
- nop
- ret
- Zapalenie:
- mov Dwa,R20
- out PORTA, Dwa
- rcall Opoznienie5sec
- ldi Dwa,0
- out PORTA, Dwa
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement