- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 19

Thema: Timer1, Interrupt wird nur einmal ausgeführt

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.03.2019
    Beiträge
    14

    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
    
    ;-------------------------------------------------------------------------------------------
    Geändert von Helmut1234 (21.03.2019 um 15:37 Uhr)

Ähnliche Themen

  1. Warten auf Tastendruck -> Interrupt wird nicht mehr ausgeführt
    Von Amri im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 04.12.2012, 14:10
  2. If-Schleife wird nicht ausgeführt
    Von Knipser-14 im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 08.10.2010, 13:26
  3. Antworten: 1
    Letzter Beitrag: 03.08.2010, 19:37
  4. Programm wird bei geänderter Frequenz nicht mehr ausgeführt
    Von cesupa im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 19.08.2007, 01:50
  5. Anweisung wird nicht richtig ausgeführt
    Von Foooob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 20.02.2006, 19:11

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen