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

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