Atmega32 i Timer1 w trybie porównania

0

Cześć, działam sobie nad zadaniem: program Timer1 działa w trybie porównania( CTC). Licznik T/C1 taktowany jest wewnętrznym sygnałem zegarowym. Wpisz odpowiednią wartość do rejestru OCR1A. Licznik zlicza od 0 do odpowiedniej wartości i po jej osiągnięciu generuje przerwanie. Proszę ustawić preskaler. Dioda podłączona do PA.7 mruga w takt licznika co 1s.

I to co mam do tej pory:

 
.include "m32def.inc"
.org $0000
	rjmp RESET
.org OC0ADDR
	rjmp TIM1_COMPA ; przerwanie od porownania timera/licznika0

;-----------------------
.def TIME=r16
.def TEMP=r17
.def LED=r18
;-----------------------

RESET:
	ldi TEMP, low(RAMEND) ; ustawienie wskaznika stosu na koniec RAM
	out SPL, TEMP
	ldi TEMP, high(RAMEND)
	out SPH, TEMP
	;-----------------------
	ser TEMP				; ustawienie TEMP na "11111111"
	out DDRA, TEMP			; ustawienie kierunku wyjsciowego DDRA
	out PORTA, TEMP			; wygaszenie diod "11111111"
	
	ldi TEMP, (1<OCIE1A)	; przerwanie Compare Match A
	out TIMSK, TEMP
	ldi TEMP, $0C
	out TCCR1B, TEMP
	;-------- test -------

	;---------------------
	ldi TIME, 250
	out OCIE1A, TIME
	ldi TEMP, 0
	sei

MAIN_LOOP: rjmp MAIN_LOOP

TIM1_COMPA:
	inc TEMP
	cpi TEMP, 125
	brne PAUSE
	ldi TEMP, 0
	com LED
	ori LED, $7F
	out PORTA, LED

PAUSE:
	reti

I o ile się kompiluje to nie działa prawidłowo, dioda nie mruga. Czy ktoś widzi czego tutaj może brakować? Testuję to na AVR Studio 4 emulator.

0

Cześć,

w tym fragmencie:

ldi TIME, 0x1
    out OCIE1A, TIME
    ldi TEMP, 0
    sei

Wstawiasz wartość 250 do OCIE1A, który jest bitem konfiguracyjnym w rejestrze TIMSK, dlatego właśnie żadna wartość nie ląduje w tym bicie (ani w rejestrze). Nie analizowałem kodu dalej, ale może to jest przyczyną tego, że Twój kod nie działa?
Po drugie z tego co widzę chcesz wrzucić CZAS o wartości 250 (czego? Jednostki też warto zawierać w komentarzach ;) ) ale czas ten (odpowiednio obliczony - dokumentacja) wrzucać należy do rejestru porównań.

To tyle, powodzenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1