U(S)ART empfängt nicht

Gast #420371
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.
1
#include <avr\io.h>
2
#include <avr\interrupt.h>
3
#define F_CPU 3686400
4
#define UART_BAUD_RATE 9600
5
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
6

7
void cominit(void);
8
void send(char val);
9

10
int main(void) {
11
sei();
12
DDRC=0xff;
13
PORTC=0x00;
14

15

16
cominit();
17

18
send('s');
19

20
  
21
PORTC++;
22

23

24
  for(;;) {
25
  
26

27
  
28
  
29
  }
30

31
}
32

33

34

35
void cominit() {
36

37

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

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

45
}
46

47
void send(char val) {
48

49

50
  UDR = val; 
51
  while (!(UCSRA & (1<<UDRE))); /* warten bis Senden moeglich           
52
       */
53
                       /* schreibt das Zeichen x auf die Schnittstelle
54
*/
55
  
56
}
57

58

59
ISR (USART_RXC_vect) {
60
  cli();
61
  unsigned char recv;
62
  
63
  recv=UDR;         //Zeichen vom Register holen
64
  send(recv);         //Zeichen zurücksenden
65
  PORTC++;
66
  sei();
67
}

danke im voraus
Gast #420373
Lesenswert?
• ▲
▼
Oh, wusste gar nicht dass man das machen muss =).

Okay,
1
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.

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.