Über UART empfangener Wert mit LEDs darstellen

Gast #768782
Lesenswert?

Hallo,

ich habe das STK500 und probiere gerade mit dem UART rum.
Dabie will ich über HyperTerminal ein Zeichen an den Atmega8 schicken. 
Dieses Zeichen soll auf PORTB dargestellt werden. Die LEDs flackern 
dabei aber immer nur ganz kurz (aber der richtige Wert!). Wieso bleiben 
die LEDs nicht an? Ich weise doch dem PORTB das Register UDB zu?!?
Das Zeichen kommt mit Sicherheit richtig an, wenn ich es zurückschicke, 
erscheint es richtig im HyperTerminal-Fenster!

Hier mein Code (die relevanten Stellen):

int main(void)
{
  DDRA = 0x00;
  DDRB = 0xFF;
  PORTB = 0xFF;
  DDRD = (0<<PD2)|(1<<PD1)|(0<<PD0);

  UCSRB |= (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);

    UBRRL = 51;    //Baudrate 9600 bei f_cpu = 8MHz

  sei();

  while(1)
  {
  };
}

ISR(USART_RXC_vect)
{
  uint8_t received_byte = UDR;
  PORTB = received_byte;
  UDR = received_byte;
};



Danke schonmal im Voraus,

Gruß Flea
#768800
Lesenswert?

@ flea (Gast)

>dabei aber immer nur ganz kurz (aber der richtige Wert!). Wieso bleiben
>die LEDs nicht an? Ich weise doch dem PORTB das Register UDB zu?!?

Du aktivierst den TXC Interrupt. Wozu? Hast du auch einen 
Interrupthandler dafür? Wenn nicht, macht dein AVR jedes mal einen 
Reset, wenn ein Zeichen gesendet wurde! Versuch es mal ohne TXCIE.

1
int main(void)
2
{
3
  DDRA = 0x00;
4
  DDRB = 0xFF;
5
  PORTB = 0xFF;
6
  DDRD = (0<<PD2)|(1<<PD1)|(0<<PD0);
7

8
  UCSRB |= (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
9
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);
10

11
    UBRRL = 51;    //Baudrate 9600 bei f_cpu = 8MHz
12

13
  sei();
14

15
  while(1)
16
  {
17
  };
18
}
19

20
ISR(USART_RXC_vect)
21
{
22
  uint8_t received_byte = UDR;
23
  PORTB = received_byte;
24
  UDR = received_byte;
25
};


MFG
Falk

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