AT89C2051. Kann nichts empfangen

Gast #4376246
Lesenswert?
• ▲
▼
Hallo,

ich kommuniziere mit meinem AT89C2051 mit einem anderen µC über UART.
Die Baudrate liegt bei 9600.

Mein Problem ist, dass ich zwar vom AT89C2051 zum anderen µC Senden 
kann( und er empfängt es auch) allerdings kann ich keine Daten 
empfangen.

Ich hab am Pin des RX nachgeguckt und dort kommen die Daten richtig an.

mein Quellcode ist noch recht unvollständig, aber es geht ums Prinzip:

void Timer1_Init(void)
{
  TH1 = 0xFA;
  TL1 = TH1;                          // init Timer1
    TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit 
autoreload
    TMOD |=  0x20;
  IE |= 0x08;      // Interrupt enablen
  TR1 = 1;                            // START Timer1
}

void UART_Init(void)
{
  SCON = 0x50;
  IE |= 0x10;
}

void UART_tx(unsigned char val)
{
  SBUF = val;
}


void UART_ISR(void) interrupt 4
{
  if(TI)
  {
    TI=0;
  }

  if(RI)
  {
    RI = 0;

    gewZuLED = 0xFF;

        //AnweisungsInterpreter(SBUF);
  }

}
Gast #4376350
Lesenswert?
• ▲
▼
Hallo Tobias,

gibst du Interrupts generell frei, also steht irgendwo im Code "EA = 1", 
oder "IE |= 0x80", oder Ähnliches? Sonst wird das nichts mit 
interruptgesteuerten Empfang.

Senden geht in deinem Programm auch ohne Interrupt.

Gruß. Tom
#4377673
Lesenswert?
• ▲
▼
Erstens: WO schaltest Du EA auf 1? Nur, weil Du endlos senden kannst, 
heißt das noch nicht, dass auch die ISR angesprungen wird. Du hast ja 
schließlich keine Abfrage von TI in deiner Senderoutine drin.
Zweitens: WO liest Du aus SBUF? Oder nimmst Du Zeichen=getchar( ); ?

EDIT:
1
  IE |= 0x08;      // Interrupt enablen
Macht nicht wirklich Sinn. Hier schaltest Du den Interrupt für den Timer 
1 frei, der macht aber die Baudrate, da ist der Interrupt eher 
uninteressant bis komplett falsch (bei Mode 2 und TH1 auf 0xFA immerhin 
alle 6 MZ ein Interrupt!!)

Mit
1
  IE |= 0x80;      // Interrupt enablen
würde EA wirklich auf 1 gesetzt werden...

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.