.include "m128def.inc" .org $0000 rjmp RESET .org INT0addr rjmp INTv .org INT1addr rjmp INTv .org INT2addr rjmp INTv .org $0046 RESET: ; inicijaliziramo stack ldi r16, LOW(RAMEND) out SPL, r16 ldi r16, HIGH(RAMEND) out SPH, r16 ; omogucimo interrupt sei MAIN: rjmp MAIN ; INTx vektor - odredi koju rutinu pozvati INTv: in r0, GICR ; prebaci u r16 da mozemo koristit cpi mov r16, r0 cpi r16, 1 ; int0? breq INT0POZIV cpi r16, 2 ; int1? breq INT1POZIV cpi r16, 4 ; int2? breq INT2POZIV rjmp INTvKRAJ INT0POZIV: ; da li se obraduje visi prioritet? mov r16, r15 cpi r16, 2 brge INTvKRAJ ldi r16, 1 mov r15, r16 sei rcall INT00 rjmp INTvKRAJ INT1POZIV: ; da li se obraduje visi prioritet? mov r16, r15 cpi r16, 3 brge INTvKRAJ ldi r16, 2 mov r15, r16 sei rcall INT01 rjmp INTvKRAJ INT2POZIV: ldi r16, 3 mov r15, r16 sei rcall INT02 INTvKRAJ: reti INT00: nop nop nop nop nop inc r10 clr r15 ret INT01: nop nop nop nop nop inc r11 clr r15 ret INT02: nop nop nop nop nop inc r12 clr r15 ret