- ;
- ; z1.asm
- ;
- ;
- ; Author : Superson Wojciech
- .org 0 ;dyrektywa wymuszająca położenie następujących po niej rozkazów poczynając od adresu 0x000
- jmp Reset ;adres 0x000 to wektor przerwania inicjalizacyjnego umieszczmy tutaj skok bezposredni do podprogramu reset
- jmp Ext_int1 ;adres 0x004 to wektor przerwania zewnętrznego INT0 skok bezpośredni do podprogramu Ext_int1
- Reset: ; podprogram obsługi przerwania inicjalizacyjnego
- ldi R16, HIGH(RAMEND)
- out SPH, R16
- ldi R16, LOW(RAMEND)
- out SPL, R16 ;inicjalizacja stosu
- sei ;zezwolenie na obsługę przerwań
- ser R16 ;ustawienie wszystkich bitow rejestru R16
- out DDRA, R16 ;ustawienie wszystkich pinow PA jako wyjściowe
- out DDRB, R16 ;ustawienie wszystkich pinow PB jako wyjściowe
- ldi R16, 0b11110000 ;załaduj stałą 11110000(b) -> R16
- out PORTA, R16 ;wyjscie na PA wartosci 11110000(b)
- in R16, MCUCR ;wczytanie rejestr MCUCR -> R16
- ori R16, 0b00000100 ;ustawienie R16.1 = 1
- andi R16, 0b11110111 ;ustawienie R16.0 = 0
- out MCUCR, R16 ;ustawienie trybu 'any logical change' dla przerwania INT1
- in R16, GICR ;wczytanie rejestru GICR -> R16
- ori R16, 0b10000000 ;ustawienie R16.6=1
- out GICR, R16 ;odblokowanie przerwania INT1
- jmp start ;skocz do programu głównego
- Ext_int1: ;podrpogram obsługi przerwania INT0
- cli ;zablokuj obsługę przerwań
- push R16 ;zabezpieczenie zawartości R16 na stosie
- in R16, SREG ;wczytanie rejestru SREG -> R16
- push R16 ;zabezpieczenie zawartości SREG na stosie
- in R16, PORTA ;wczytanie rejstru PORTA -> R16
- com R16 ;negowanie bitow R16
- out PORTA, R16 ;zapisanie zawartości rejestru R16 w rejestrze PORTA
- pop R16 ;zdejmij ze stosu pierwotną wartość SREG i zapisz w R16
- out SREG, R16 ;przywrócenie zachowanego SREG
- pop R16 ;przywrócenie zachowanego R16
- reti ;powróć z podprogramu obsługi przerwania INT0
- start: ;program główny
- ldi R16, 0 ;wczytanie wartości 0 -> R16
- ldi R17, -2 ;wczytanie wartości -2 -> R17
- add R17, R16 ;dodanie wartości 0 do wartości -2
- rcall opoznienie256 ;wywołanie podprogramu opozniajacego
- brbs 4, ujemny ;skok do etykiety jeśli wynik był ujemny
- nieujemny:
- ldi R16, 0b01010101 ;wczytanie wartości 01010101(b) -> R16 (wynik nieujemny)
- rjmp dalej ;pominięcie ustawiania wartości dla wyniku ujemnego
- ujemny:
- ldi R16, 0b10101010 ;wczytanie wartości 10101010(b) -> R16 (wynik ujemny)
- dalej:
- out PORTB, R16 ;zapisanie wartość rejestru R16 w rejestrze PORTB
- jmp start ;dopis zapętlający program główny
- opoznienie256:
- nop ;procedura opozniajaca o 256 cykli
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- ret ; powróć z podprogramu