Przepraszam za zakładanie nowego wątku w temacie tyle razy poruszanym na forum ale właśnie program oparty na wiedzy z forum mi nie działa. Ogólnie układ powinien co 1sek zwiększać wartość na linijce diodowej podłączonej do portu B i w symulacjach na WINAVR to właściwie działa jednak, gdy wgrałem program do kości ciągle obserwuje świecenie pierwszej diody:( Może ktoś podpowie co robie źle?
INCLUDE "plik_definicji.txt"
;----------SEGMENT DANYCH--------------------------------
.DSEG
.ORG 0x60
;----------WEKTORY PRZERWAN------------------------------
.CSEG
.ORG 0 ; wektor przerwania inicjalizacji
rjmp Reset ; skok do procedury inicjalizacji
.ORG OC1Aaddr
rjmp zwieksz
;----------SEGMENT PROGRAMU------------------------------
Main:
jmp Main
;----------SEGMENT PRZERWAN------------------------------
///////////////////////////////////przerwanie inicjalizujace
Reset:
; ustawienie wskaznika stosu
ldi R16, high(RAMEND)
ldi R17, low(RAMEND)
out SPH, R16
out SPL, R17
; port B jako wyjscie
ldi R16, 0xFF
out DDRB, R16
; wlacznie licznika
ldi R16, 0b00000000 ; tryb ctc czestotoliwosc 1MHz
ldi R17, 0b00001010
out TCCR1A, R16
out TCCR1B, R17
ldi R16, TIMSK ; wlaczenie przerwania dla wyrowania ocr1a i licznika
ori R16, 1<<TOIE1
out TIMSK, R16
ldi R16, 0b00010000 ; wpisanie 10000 czyli przerwanie co 10ms
ldi R17, 0b00100111
out OCR1AH, R16
out OCR1AL, R17
ldi R16, 0x00 ; wyczyszczenie r16
ldi R17, 0b00000001 ;zapalenie 1 diody
out PORTB, R17
sei; zezwolenie globalne na int
jmp Main
zwieksz:
inc R20
cpi R20, 100 ; jesli r20=100 (czyli minela 1sek.)
breq zmien_diody ;to skocz do zmien diody jesli nie to skocz do koniec_int_licznik
jmp koniec_int_licznik
zmien_diody: ; wyzeruj r20 i zwieksz wartosc na linijce diodowej
ldi R20, 0
inc R17
out PORTB, R17
koniec_int_licznik:
reti
INCLUDE "plik_definicji.txt"
;----------SEGMENT DANYCH--------------------------------
.DSEG
.ORG 0x60
;----------WEKTORY PRZERWAN------------------------------
.CSEG
.ORG 0 ; wektor przerwania inicjalizacji
rjmp Reset ; skok do procedury inicjalizacji
.ORG OC1Aaddr
rjmp zwieksz
;----------SEGMENT PROGRAMU------------------------------
Main:
jmp Main
;----------SEGMENT PRZERWAN------------------------------
///////////////////////////////////przerwanie inicjalizujace
Reset:
; ustawienie wskaznika stosu
ldi R16, high(RAMEND)
ldi R17, low(RAMEND)
out SPH, R16
out SPL, R17
; port B jako wyjscie
ldi R16, 0xFF
out DDRB, R16
; wlacznie licznika
ldi R16, 0b00000000 ; tryb ctc czestotoliwosc 1MHz
ldi R17, 0b00001010
out TCCR1A, R16
out TCCR1B, R17
ldi R16, TIMSK ; wlaczenie przerwania dla wyrowania ocr1a i licznika
ori R16, 1<<TOIE1
out TIMSK, R16
ldi R16, 0b00010000 ; wpisanie 10000 czyli przerwanie co 10ms
ldi R17, 0b00100111
out OCR1AH, R16
out OCR1AL, R17
ldi R16, 0x00 ; wyczyszczenie r16
ldi R17, 0b00000001 ;zapalenie 1 diody
out PORTB, R17
sei; zezwolenie globalne na int
jmp Main
zwieksz:
inc R20
cpi R20, 100 ; jesli r20=100 (czyli minela 1sek.)
breq zmien_diody ;to skocz do zmien diody jesli nie to skocz do koniec_int_licznik
jmp koniec_int_licznik
zmien_diody: ; wyzeruj r20 i zwieksz wartosc na linijce diodowej
ldi R20, 0
inc R17
out PORTB, R17
koniec_int_licznik:
reti