Hallo Beschäftige mich gerade mit dem Prozessor AT90CAN128 Beim Empfangen von Daten über RXD0 resetet mein System. Das ende klappt. Aber auch nur beim Empfangen von einen char tillt alles. ?? Gruss
1 | //C Code Example (1)
|
2 | #include "pins.h" |
3 | #include "uart.h" |
4 | #include <avr/interrupt.h> |
5 | |
6 | unsigned int buffercounter = 0; |
7 | char usart_rx_buffer[BUFFER_SIZE],newdata; |
8 | char *rx_buffer_pointer_in = &usart_rx_buffer[0]; |
9 | char *rx_buffer_pointer_out = &usart_rx_buffer[0]; |
10 | unsigned char receive_char; |
11 | |
12 | |
13 | void USART0_Init (unsigned long baudrate) |
14 | //void USART0_Init (unsigned long baudrate)
|
15 | {
|
16 | |
17 | unsigned long baud = (F_CPU/(16*baudrate))-1; |
18 | SETBIT (DDRE,PE1); |
19 | /* Set baud rate */
|
20 | UBRR0H = (unsigned char) (baud>>8); |
21 | UBRR0L = (unsigned char) baud; |
22 | /* Set frame format: 8data, no parity & 2 stop bits */
|
23 | UCSR0C = (0<<UMSEL0) | (0<<UPM0) | (1<<USBS0) | (3<<UCSZ0); |
24 | /* Enable receiver and transmitter */
|
25 | // UCSR0B = (1<<RXEN0) | (1<<TXEN0);
|
26 | UCSR0A =0; |
27 | UCSR0B =(1 << TXEN0 | 1 << RXEN0 | 1<< RXCIE0); |
28 | //return baud;
|
29 | }
|
30 | //C Code Example (1)
|
31 | void USART0_Transmit (unsigned char data) |
32 | {
|
33 | /* Wait for empty transmit buffer */
|
34 | while ( ! ( UCSR0A & (1<<UDRE0))); |
35 | /* Put data into buffer, sends the data */
|
36 | UDR0 = data; |
37 | }
|
38 | |
39 | void SendRs232(char* string)//Nullterminiert |
40 | {
|
41 | unsigned char ende = 0; |
42 | int i=0; |
43 | while(!ende) |
44 | {
|
45 | unsigned char data = string[i++]; |
46 | if(data == 0) |
47 | ende = 1; |
48 | else
|
49 | USART0_Transmit(data); |
50 | }
|
51 | }
|
52 | |
53 | ISR (USART_RX0) |
54 | {
|
55 | |
56 | |
57 | while (!(UCSR0A & (1<<RXC0))); |
58 | receive_char=UDR0; |
59 | /* receive_char=UDR0 &127; // &127 damit auch 7 Datenbit funktioniert.
|
60 | usart_rx_buffer[buffercounter]=receive_char;
|
61 | buffercounter++;
|
62 | |
63 | if((buffercounter > BUFFER_SIZE - 1)||(receive_char==13))
|
64 | {
|
65 | if((buffercounter < BUFFER_SIZE )&&(receive_char==13))
|
66 | usart_rx_buffer[buffercounter+1]=0; // f?r stringende !
|
67 | buffercounter=0;
|
68 | }
|
69 | */
|
70 | |
71 | |
72 | }
|