mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik U(S)ART empfängt nicht


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Hier mal ein simples U(S)ART-Programm zum testen. Seitdem ich es
auf RX-Seite auf Interrupts umgebaut habe, empfängt es nichts mehr, es
geht ja noch nicht mal in die ISR. vorher mit "Warten auf
erfolgreichen Empfang" ging es.

mc ist atmega8.
#include <avr\io.h>
#include <avr\interrupt.h>
#define F_CPU 3686400
#define UART_BAUD_RATE 9600
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)

void cominit(void);
void send(char val);

int main(void) {
sei();
DDRC=0xff;
PORTC=0x00;


cominit();

send('s');

  
PORTC++;


  for(;;) {
  

  
  
  }

}



void cominit() {


  UCSRB |= (1<<TXEN);      // UART TX einschalten
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);  // Asynchron 8N1 
  UCSRB |= ( 1 << RXEN ); //rx anschalten

  UBRRH = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) >> 8 );
  UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU );

}

void send(char val) {


  UDR = val; 
  while (!(UCSRA & (1<<UDRE))); /* warten bis Senden moeglich           
       */
                       /* schreibt das Zeichen x auf die Schnittstelle
*/
  
}


ISR (USART_RXC_vect) {
  cli();
  unsigned char recv;
  
  recv=UDR;         //Zeichen vom Register holen
  send(recv);         //Zeichen zurücksenden
  PORTC++;
  sei();
}



danke im voraus

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte sich lohnen, den RX Interrupt in der UART freizugeben.

Die cli/sei in der Interrupt Routine sind nicht nur überflüssig,
sondern nachgerade gefährlich.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, wusste gar nicht dass man das machen muss =).

Okay,
UCSRB |=(1<<TXCIE); //interrupt
, hinzugefügt

aber noch immer keine funktion des programms, er sendet nur lauter
"s" weil er anscheinend immer wieder in main() reingeht.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich sollte schlafen gehen, mit RX... gehts natürlich

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher µC? Nicht zufällig ein Mega128 mit 103-er Fuse?

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mega 8;).

Ne, fehler war: ich hatte versehentlich den TXI aktiviert, anstelle des
RXI..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.