Vergleichsvariable für Timerinterrupt auf 0 setzen

OP #3398497
Lesenswert?
• ▲
▼
Hallo zusammen,

stehe vor folgendem Problem:
Ich übertrage über die serielle Schnittstelle Daten an meine USART.
Nun soll der Vergleichswert "swTeiler", bei jeder Übertragung auf 0 
zurückgesetzt werden, damit die Interrupt-Routine auch definitiv im 
ersten Durchlauf erreicht wird.

USART Interrupt
1
ISR(USART_RXC_vect) 
2
{
3
  a = UDR;
4
        if (a == '1') 
5
  {
6
    Auslesen = 60;
7

8
  }
9
}

Timer Interrupt
1
ISR (TIMER1_COMPA_vect)
2
{
3
  static uint16_t swTeiler = 0;
4
  swTeiler++;
5
  //if (swTeiler == 60 )
6
  if (swTeiler == Auslesen )
7
  {
8
    swTeiler = 0;
9
    PORTD |= (1<<PD6);
10
    TCCR1B |= (1<<WGM12) | (1<<CS12); // | (1<<CS10) | (1<<CS11);
11
    TIMSK |= (1<<OCIE1B);
12
    OCR1B = 3094;
13
    sei();
14
  }
15
}
16

17
ISR (TIMER1_COMPB_vect)
18
{
19
  static uint8_t vTeiler = 0;
20
  vTeiler++;
21
  if (vTeiler == 10)
22
  {
23
    vTeiler = 0;
24
    PORTD &=~ (1<<PD6);
25
  }
26
}
Komm leider auf keinen grünen Zweig und bin für jeden Hilfe dankbar.
mfg
c63
#3398501
Lesenswert?
• ▲
▼
Problem Behoben schrieb:

> Nun soll der Vergleichswert "swTeiler", bei jeder Übertragung auf 0

> ISR (TIMER1_COMPA_vect)
> {
>   static uint16_t swTeiler = 0;

Dann bleibt dir nichts anders übrig, als die Variable aus der Funktion 
rauszunehmen und zu einer globalen Variablen zu machen, damit sie auch 
ausserhalb der ISR-Funktion sichtbar ist und du somit auf sie in der 
USART ISR zugreifen kannst.

Es gäbe noch eine andere Möglichkeit, nämlich einen speziellen Wert für 
'Auslesen' zu vereinbaren, der in der Timer-ISR entsprechend gehandhabt 
wird, aber eigentlich wird es damit immer komplizierter und entfernt 
sich mehr vom Zweck. Den swTeiler anstelle einer funktionslokalen static 
Variable einfach global zu machen, ist um einiges einfacher.


> Komm leider auf keinen grünen Zweig und bin für jeden Hilfe dankbar.

Nicht?
Dann wäre mal das Durcharbeiten eines C-Buchs angebracht.
Sichtbarkeit von Variablen und Funktionen, wie man sie bestimmt und wie 
man sie einschränkt sind eigentlich Basisdinge.

Antwort schreiben

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.

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.