Probleme mit UART ATmega8

OP #2968378
Lesenswert?
• ▲
▼
Hallo liebes Forum,

ich habe ein Problem mit dem UART meines Mega8.
Das Uart ansich funktioniert einwandfrei. Der Controller soll, wenn ein 
externer Interrupt ausgelöst wird zwei Zeichen im Abstand von 10ms 
empfangen.
Das Problem ist, das das Zeichen zwar anscheinend empfangen wird, die 
Anweisungen im jeweiligen case-Fall jedoch erst beim nächsten Interrupt 
ausgeführt werden. Das heisst: ich sende zwei Zeichen (data kommt im 
switch vor) und löse gleichzeitig einen Interrupt aus -> es passiert 
nichts, wenn ich jetzt ein zweites Mal zwei Zeichen sende (data kommt 
dieses mal nicht im switch vor) und einen Interrupt auslöse, passiert 
das, was eigendlich beim ersten mal hätte passieren sollen usw.

Ich hoffe Ihr könnt mir helfen!

Frohe Weihnachten!
1
ISR(INT1_vect)      //Interruptroutine für INT1 (BSY-Eingang)
2
{
3
  idGot = uart_getc();      //ID lesen
4
  _delay_ms(10);        //kurz warten
5
  dataGot = uart_getc();      //DATA lesen
6
    
7
  if (idGot == 0x30)
8
  {
9
    switch(dataGot)
10
    {
11
      case 0x01:  busWrite(0x01, 0x02);
12
          setLEDstatus(OFFLINE);
13
          break;
14
      
15
      case 0x03:  setLEDstatus(ONLINE);
16
          break;
17
      
18
      case 0x31:  setLEDstatus(OFFLINE);
19
          _delay_ms(500);
20
          setLEDstatus(ONLINE);
21
          break;
22
    }  
23
  }
24
  _delay_ms(10);
25
    
26
  dataGot = 0x00;
27
  idGot = 0x00;  
28
}
Gast #2968821
Lesenswert?
• ▲
▼
Warum soll er denn Zeichen empfangen, wenn ein Interrupt
ausgelöst wurde? Die Zeichen selbst können doch genug
Interrupt auslösen!

Liegt das erste Zeichen denn schon fertig im Empfänger vor,
wenn der Interrupt kommt? Sonst dürfte idGot = uart_getc();
ins Leere greifen.

Liegt dataGot dann auch schon vor? - Dann wurde idGot
vielleicht schon überschrieben???

Kann mich eigentlich nur  <Torsten B. (torty)> anschließen:
Lass den zusätzlichen INT1-Quatsch und benutze USART RX Int
mit nem knuffigen kleinen Ringspeicher...

Oder erläutere deine Vorgehensweise besser!

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.