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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren