www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt bei Timer2 wird nicht ausgelöst


Autor: Thomas Frosch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi arbeite mit einem ATmega 8L mit 8MHz

in meinem Assembler Prog soll ein Interrupt durch Timer 2 ausgelöst 
werden dies funktioniert auch einmal! dann löst der Timer 2 kein 
interrupt mehr aus?! der Timer läuft aber!


TOIE2 ist dabei ständig gesetzt und wird auch nicht verändert!
zudem ist CS20 auf 1

und OCF2 wird automatisch auf 1 gesetzt

TOV2 wird sozusagen beim 2. Interrupt auf 1 gesetzt

wie bekomme ich es hin dass der Timer statt dem TOV2 Flag wieder ein 
Interrupt auslöst?

Autor: Christian T. (shuzz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du bitte mal Deinen Code posten? ;)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Haste am Ende von der Interrupt-Routine auch statt "ret" ein "reti" 
verbaut?

Autor: Thomas Frosch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So dass sind mal die wichtigsten Teile meines Progs ich hoffe ihr blickt 
da durch!


.include "m8def.inc"         
.def temp = r16
.def temp1 = r21
.def temp2 = r22
.def temp3 = r23
.def sevent = r17 ;variable für Postscaler
.def completed = r18
.equ prescaler = 0b00000010
.equ postscaler =7

.def Key_Old = r24
.def Key_New = r25
.def Temperatur = r19

.org 0x0000
  rjmp main
.org INT1addr                 
  rjmp IR_Interrupt
.org OVF2addr
  rjmp IR_Sending
.org OVF0addr
  rjmp IR_Incomming


main:

    ldi temp,Low(Ramend); Stackpointer initialisieren
    out SPL, temp
    ldi temp,High(RAMEND)
    out SPH,temp

    ldi temp,0b11110000 ;0->Eingang  1->Ausgang
    out DDRD, temp
    ldi temp,0b11111111
    out PortD,temp

    ldi temp, 0xFF
    out DDRB, temp

    ldi temp, 0b00111100
    out DDRC, temp

    ldi temp,0b00000000 ;prescaler von Timer0 auf 0
    out TCCR0,temp

    ldi temp, 0b00000001 ;Timer 0  Erlauben Interrupt bei Overflow auszulösen
    out TimSK, temp

     ldi temp, 0b00001100 ;Interrupt durch PD3 bei steigender Flanke
    out MCUCR, temp

        ldi temp, 0b10000000  ; INT1  aktivieren
        out GICR, temp

    ldi temp, 0b01100000
    out ADMUX, temp

    ldi temp, 0b11100111
    out ADCSRA, temp


    ldi completed, 0b00000000
    ldi sevent, 0b00000000

    sei
  
           rcall lcd_init     ; Display initialisieren

           rcall lcd_clear    ; Display löschen
 
           ldi temp1, 'M'     ; Zeichen anzeigen
           rcall lcd_data
 
          ;...........gekürzt................

sbic PortC,1
rcall IR_Senden

rjmp ende 

;--------------------------------------------------------------

IR_Senden:
push temp1
push temp2
push temp3


ldi temp1, 0b00000000    ;INT0 und INT1 deaktivieren
out GICR, temp1

ldi temp1,0b00000000 ; Timer0 deaktivieren
out TCCR0,temp1

ldi temp1, 0b01000000 ;Timer 2  Erlauben Interrupt bei Overflow auszulösen
out TimSK, temp1

ldi temp1,0b00000001 ;prescaler von Timer2 auf 1
out TCCR2,temp1

ldi sevent ,28
ldi completed, 28

ldi     ZL, LOW(Senden*2)             ; Adresse des Strings in den
ldi     ZH, HIGH(Senden*2)            ; Z-Pointer laden

pop temp3
pop temp2
pop temp1
ret

;--------------------------------------------------------------

IR_Sending:
push temp1
push temp2
push temp3

;ldi temp1, 0b10000000 ;Interrupt Flags löschen
;out gIFR, temp1


dec sevent
brne IR_Sending_Ende

ldi sevent ,28

lpm     temp1, Z+          ; Byte aus Flash laden in temp2 speichern

sbrc temp1,0
sbi PortC,5

sbrs temp1,0
cbi PortC,5                      ; und Z-Pointer um 1 erhöhen

dec completed
brne IR_Sending_Ende

ldi temp1,0b00000000 ;prescaler von Timer2 auf 1
out TCCR2,temp1

ldi temp1, 0b00000000 ;Timer 2  Erlauben Interrupt bei Overflow auszulösen
out TimSK, temp1

ldi temp1, 0b10000000    ;INT1 aktivieren
out GICR, temp1


IR_Sending_Ende:

pop temp3
pop temp2
pop temp1
ret






Autor: Thomas Frosch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö!! hehe

jo funktioniert danke für die schnelle Hilfe

peinlich peinlich!!!!

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt für alle Bits in den Steuerregistern Namen. Die haben den 
Vorteil, dass mal sehr viel leichter sieht, was da gemacht wird. Wer 
deinen Code kontrollieren will, muss sich statt dessen anhand der 
0b10110001 durch's Handbuch quälen um rauszukriegen was die bedeutet. 
Rechne folglich nicht damit, dass viele das tun werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.