Hy habe folgendes Prog laufen und funktioniert auch wunderbar. nur sobald ich 8 Bit (Hterm in Hex) sende bleibt das Prog hängen. Kann mir jemand helfen. Finde einfach keinen Fehler!!
1 | #define F_CPU 8000000UL // MP-Takt
|
2 | #include <avr/io.h> |
3 | #include <stdio.h> |
4 | #include <stdlib.h> |
5 | #include <inttypes.h> |
6 | #include <avr/interrupt.h> |
7 | #include <avr/wdt.h> |
8 | |
9 | |
10 | #define BAUD 19200UL //Baundrate definieren
|
11 | |
12 | #define UBRR_BAUD ((F_CPU)/(16*(BAUD))-1) //Autoberechnung bei Änderung des MP-Takt
|
13 | |
14 | |
15 | |
16 | char out[15]; |
17 | int in = 1; |
18 | int Zahl = 15; |
19 | long int i = 1; |
20 | int n = 1; |
21 | int Daten =100; |
22 | |
23 | |
24 | // Ausgaberoutinen
|
25 | |
26 | int uart_putc(unsigned char c) |
27 | {
|
28 | while (!(UCSRA & (1<<UDRE))); |
29 | |
30 | UDR = c; |
31 | return 0; |
32 | }
|
33 | |
34 | int uart_puts( char* str ) |
35 | {
|
36 | while( *str ) |
37 | uart_putc( *str++ ); |
38 | return 0; |
39 | }
|
40 | |
41 | int wait() |
42 | {
|
43 | for (i=0;i<200000;) |
44 | {
|
45 | i=i+1; |
46 | }
|
47 | }
|
48 | |
49 | // Main-Funktion
|
50 | int main (void) |
51 | {
|
52 | |
53 | // Programm
|
54 | |
55 | // RS232 aktivieren
|
56 | UCSRB |= (1 << TXEN) | ( 1 << RXEN ) | ( 1 << RXCIE ) ; // UART TX, RX einschalten |
57 | UCSRC |= ( 1 << URSEL ) | ( 1<<UCSZ1 ) | ( 1<<UCSZ0 ) | ( 1<<UPM1 ); // Asynchron 8N1, Parity even |
58 | UBRRH = (uint8_t) (UBRR_BAUD>>8); // USART Baud |
59 | UBRRL = (uint8_t) UBRR_BAUD; |
60 | |
61 | TCCR1A = (1 << WGM11) | (1 << WGM10) | ( 1 << COM1A1); |
62 | TCCR1B = ( 1 << CS11) ; |
63 | OCR1A = 0; |
64 | |
65 | sei(); |
66 | DDRB = 0xFF; |
67 | |
68 | for (;;) |
69 | {
|
70 | while (!(UCSRA & (1<<UDRE))); |
71 | UDR = Daten; |
72 | OCR1A = Daten; |
73 | wait(); |
74 | Daten=Daten+20; |
75 | }
|
76 | }
|
77 | |
78 | |
79 | |
80 | ISR(SIG_USART_RECV) |
81 | {
|
82 | Daten = UDR; |
83 | }
|