Timerinterrupt mit tiny15

Gast #94363
Hallo,

kann mir vielleicht irgend jemand sagen, wie ich es hinbekomme, das
mein avr einen Timerinterrupt auslöst?

Konkret:
ich möchte nach bestimmter Zeit Int-Serviceroutine anspringen.
Theoretisch ist ja alles klar, ich weiß nur nicht wie ichs dem AVR
sagen soll:

1. Interrupt Enable für Timer1
2. Festlegen der ISR Adresse (z.B. T1_INT:)
3. Laden des TCCR1 mit 0b10001101 (1/256)
4. Laden des Compare Registers OCR1A

So, und nun soll er einfach bei Comparematch den Int auslösen
Aber wie?? Bitte ASM

Hier ein Codeschnipsel:

RESET:

ldi  Temp, 0b10001101  ;1/256
out TCCR1, Temp

ldi  Temp, 0xf0  ;Compare register
out OCR1A, Temp

LOOP:
...
RJMP LOOP

T1_INT:
...
RETI
Gast
Wenn Du den ganzen Code geschickt hättest, hätte man auch "Fehler"
suchen können, aber so musst Du halt vergleichen ;-)

--------
.include "tn15def.inc"    ;

;Konstanten für Register
.def temp  = r16
.def temp2 = r17

.ORG  0x00
  rjmp RESET      ;Reset Interrupt
  rjmp EXT_INT0    ;Externer Interupt
  rjmp PIN_CHANGE    ;Pin Change
  rjmp TIM1_CMP    ;Timer Compare 1
  rjmp TIM1_OVF    ;Timer Overflow 1
  rjmp TIM0_OVF    ;Timer Overflow 0
  rjmp EE_RDY      ;EEprom ready
  rjmp ANA_COMP    ;Analog Compare
  rjmp ADC0      ;ADC


;hier nicht benötige Interupts
EXT_INT0:
PIN_CHANGE:
;TIM1_CMP:
;TIM1_OVF:
TIM0_OVF:
EE_RDY:
ANA_COMP:
ADC0:
  reti

RESET:
  ldi temp, (1<<CS10)|(1<<CS13)  ;Clock/16
  out TCCR1, temp

  ldi temp, (1<<DDB0)|(1<<DDB1)  ;PB.0/1 = Ausgang
      out DDRB, temp

  ldi temp, (1<<OCIE1)| (1<<TOIE1)
;Interupt TimerOverflow/TimerCompare aktivieren
  out TIMSK, temp
  sei                   ;Interrupts allgemein aktivieren


loop:
  in temp, PINB        ;Taste einlesen
  sbrc temp, 2            ;Taste gedrückt?
  rjmp _zaehl1

  ldi timer_compare, 0x00    ;niedriger TimerCompare Wert

  rjmp _zaehl_ende
_zaehl1:
  ldi timer_compare, 0xF0    ;hoher TimerCompare Wert

_zaehl_ende:
  out OCR1A, timer_compare

  rjmp loop               ; Endlosschleife

TIM1_CMP:
  sbi PORTB, 1    ;beim Timeroverflow LED aus
  reti


TIM1_OVF:
  cbi PORTB, 1    ;Bei erreichen der Zählgrenze LED an
  reti
Gast
Danke für die Antwort, ich habe aber noch einige Unklarheiten:

Was lade ich in das Temp-Register?

Kannst du mit vielleicht sagen was es mit den 1<< auf sich hat?

ldi temp, (1<<CS10)|(1<<CS13)  ;Clock/16
out TCCR1, temp

ldi temp, (1<<DDB0)|(1<<DDB1)  ;PB.0/1 = Ausgang
out DDRB, temp

ldi temp, (1<<OCIE1)| (1<<TOIE1)
out TIMSK, temp
Gast
Danke für die Antwort,

ich habe aber da noch eine Frage:

was bedeutet das 1<<??



ldi temp, (1<<CS10)|(1<<CS13)  ;Clock/16
out TCCR1, temp

ldi temp, (1<<DDB0)|(1<<DDB1)  ;PB.0/1 = Ausgang
out DDRB, temp

ldi temp, (1<<OCIE1)| (1<<TOIE1)
out TIMSK, temp
Gast
Hi...

Der Operator << bedeutet linksschieben.
1<<4 bedeutet, dass eine 1 4 mal nach links geschoben wird und damit 16
ergibt.

Diese Darstellung wird benutzt, weil sie beim Setzen einzelner Bits in
Steuerregistern (z.B. TIMSK für Timer) mehr Übersicht bietet, denn die
Bits in den Steuerregister haben Namen (siehe Datenblatt), die
aussagekräftiger sind als ihre Bitposition.

| ist der Operator für bitweises Oder. Damit werden mehrere Bits
zusammengefasst.

ldi temp, (1<<OCIE1)| (1<<TOIE1)
bedeutet demnach, dass eine 1 um OCIE1 nach links geschoben wird geORT
mit einer 1, die um TOIE1 nach links geschoben wird. Vereinfacht gesagt
wurden die Bits OCIE1 und TOIE1 gesetzt, alle anderen Bits gelöscht.

Dies ist bedeuten aussagekräftiger als das Setzen irgendeines
Hex-Wertes, dessen Inhalt man nur über das Datenblatt erfährt. Im Laufe
der Zeit prägt man sich die von ATMEL definierten Symbolnamen für
I/O-Register und deren Bits aber ein...

Bit- & Bytebruch... - ...HanneS...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.