-         

Ergebnis 1 bis 2 von 2

Thema: Timerproblem TIFR

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    38
    Beiträge
    324

    Timerproblem TIFR

    Anzeige

    brauche mal wieder eure Hilfe. Nachdem ich es nun geschafft habe eine LED zum leuchten zu bringen, habe ich mich nun daran versucht mit dem Timer zu arbeiten.
    Will nun das 0Bit von TIFR abfragen, damit ich den Überschlag zählen kann. Allerdings kommt AVR Studio immer mit der Fehlermeldung Invalid Register, wenn ich SBRS, CPSE, MOV. Egal was, immer die gleiche Fehlermeldung. Irgentwie muß ich doch dieses eine Bit abfragen können, kopieren können, oder sonstwas.
    Code:
    start:
    	ldi mp,0x00; Aufwärtszähler auf 0 setzen TCNT0
    	out tcnt0,mp;
    	ldi mp,0x05; 00000101 in TCCR0 (prescaler 1024)
    	out tccr0,mp
    uebertrag:
    	SBRS TIFR,0 ;Skip if Bit in Register is Set
    	rjmp uebertrag
    	....
    	rjmp start
    Würde den Code dann so weiterschreiben, dass ich die 1 aus TOV0 in ein anderes Register kopieren und jede weitere 1 hinzuaddieren, bis ich einen bestimmten Übertragswert erreicht habe (ZEIT).
    Gibt es Tips? Was mache ich verkehrt?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.05.2004
    Ort
    Wilhelmshaven
    Alter
    38
    Beiträge
    324
    so, habe kleine Änderungen vorgenommen. Vielleicht kann mir einer sagen, warum der sch*** Timer nicht anfängt zu zählen. TCNT0 bleibt ständig unverändert und ich habe glaube ich alle notwendigen Bits gesetzt. So langsam macht mich das richtig wütend. Naja zumindest habe ich es geschafft mit dem IN Befehl TIFR in ein anderes Register zu kopieren, so das ich es abfragen kann.


    Code:
    .NOLIST
    .INCLUDE "m8def.inc"
    .LIST
    rjmp	main
    reti         ; IRQ0
    reti         ; IRQ1
    reti         ; Timer1 Capture
    reti         ; Timer1 Compare
    reti         ; Timer1 Overflow
    ;rjmp TIM0_OVF       ; Timer0 Overflow
    reti         ; SPI Complete
    reti         ; UART Rx
    reti         ; UART Data empty
    reti         ; UART Tx
    reti         ; ADC Conversion Complete
    reti         ; EEPROM ready
    reti         ; Analog Comparator
    main:
    	ldi	R16,LOW(RAMEND) ;Initiallisiert Stackpointer
    	out	SPL,R16
    	ldi	R16,HIGH(RAMEND)
    	out	SPH,R16
    	sei ;Global Interrupt Enable
    
    ;TIM0_OVF: 
    timer:
    	ldi R16,0x00; Aufwärtszähler auf 0 setzen TCNT0
    	out TCNT0,R16; Timer/Counter Register
    	ldi R16,0x01 ;Timer/Counter0 Overflow Interrupt Enable
    	out TIMSK,R16 ;Timer/Counter Interrupt MaskRegister 
    	ldi R16,0x05; 00000101 in TCCR0 (prescaler 1024)
    	out TCCR0,R16 ;Timer/Counter Control Register 
    	;(FUCKING TIMER GESTARTET ODER NICHT?)
    
    uebertrag: ;Übertragsabfrage
    	in R16, TIFR ;Timer/Counter0 Overflow Flag
    	sbrs R16,0 ;Skip if Bit in Register is Set
    rjmp uebertrag	
    ;reti ;Interrupt Return
    
    
    ;	in R16, TIFR ;Timer/Counter0 Overflow Flag
    ;	sbrs R16,0 ;Skip if Bit in Register is Set	
    ;rjmp uebertrag
    ;	cbr R16,0	 ;Timer/Counter Interrupt Flag Register
    	
    	 ;Skip if Bit in Register is Set
    ;	rjmp uebertrag
    ;weiter:
    
    ;rjmp weiter	....
    rjmp main

    NACHTRAG:
    habe herausgefunden, dass wenn ich TCCR0 auf 001 (no prescaling) setze, er zählt. Sobald jedoch ein prescaling drin ist, macht er es nicht mehr.

Berechtigungen

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