Timer1, Interrupt wird nur einmal ausgeführt
	
	
		Hallo liebe Gemeinde, 
ich habe nur ein bescheidene Frage.
Bei meinem Assembler Programm (auf dem RN-Control) sollen alle LEDs an PORTC im sekunden Takt blinken. 
Dies habe ich mit dem Timer1 (16-Bit) umgesetzt. Mein Problem ist nur, dass der Interrupt nur einmal ausgeführt wird. Die LEDs leuchten für eine Sekunde und gehen dann aus. 
Meine Vermutung ist, dass das Zählregister nicht zurückgesetzt wird, aber das ist nur eine Vermutung. 
Hat vielleicht jemand einen Hinweis was ich vergessen haben könnte oder vielleicht falsch gemacht habe?
Viele Grüße
Helmut
	Code:
	
##########
#PROGRAMM#
##########
; definitions
.def        temp = R16
.def        temp_1        = R17
; interrupt vectors
.org        0x000        ; reset handler
        rjmp main
.org        0x00E        ; Timer1 CompareA Handler
        rjmp interrupt_compare_A
.org        0x010        ; Timer1 CompareB Handler
        rjmp interrupt_compare_B
main:        ; main programm
;;; Timer Counter
;; Control Register A 
LDI                                temp,        0x00        ; normal & Clear Timer on Compare Match (CTC) Mode -> own overflow value
OUT                                TCCR1A,        temp        ; Control Register A
;; Control Register B
LDI                                temp,        0b00011101        ; Timer prescaler of 1024 & Clear Timer on Compare Match (CTC) Mode -> self adjust overflow value
OUT                                TCCR1B,        temp                ; Control Register B
;; Output Compare Register 1 A for CTC
; write value 15625 -> 15625 * 1024 = 16MHz -> 1 second count
LDI                                temp,        0b00001001
OUT                                OCR1AL,        temp
LDI                                temp,        0b00111101
OUT                                OCR1AH,        temp
;; Output Compare Register 1 B for CTC
; write value 31,250 -> 31,250 * 1024 = 32MHz -> 2 seconds count
LDI                                temp,        0b00010010
OUT                                OCR1BL,        temp
LDI                                temp,        0b01111010
OUT                                OCR1BH,        temp
;;; PORTC set as output
LDI                        temp,        0xFF        ; Register komplett auf 1 setzen / LDI geht nur von R16 bis R31
OUT                        DDRC,        temp        ; durch DDRC wird festgelegt ob die Pins von PORTC als Ausg. (1) oder Eing. (0) definiert werden
                                                        ; DDRC wird nun mit den Werten aus R16 befüllt
;;; Interrupt handling
;; for timer 1
LDI                                temp,        0x08        ; Bit 4 – OCIE1A: Timer/Counter1, Output Compare A Match Interrupt Enable
OUT                                TIMSK,        temp        ; Timer/Counter Interrupt Mask Register
;; global
sei                                                                ; set global interruptenable
loop:
        rjmp loop        ; endless loop
;-------------------------------------------------------------------------------------------
; interrupts
interrupt_compare_A:        ; interrupt routine for compare register 1 B
        IN                        temp_1,        SREG        ; save status register
        LDI                        temp,        0x00        
        OUT                        PORTC,        temp        ; LEDs on
        OUT                        SREG,        temp_1        ; restore status register
        reti
interrupt_compare_B:        ; interrupt routine for compare register 1 A
        IN                        temp_1,        SREG        ; save status register
        LDI                        temp,        0xFF
        OUT                        PORTC,        temp        ; LEDs off
        OUT                        SREG,        temp_1        ; restore status register
        reti
;-------------------------------------------------------------------------------------------