Hallo,
wir versuchen hier mithilfe eines MAX232 Zeichen an den PC zu senden. 
Das ganze funktioniert solange die RxD-Leitung vom ISP (USB-AVR Lab) mit 
der des µC verbunden ist. Trennen wir diese Verbindung sendet der µC 
nichts mehr. Eine Test-LED an PINC0 blinkt weiterhin fröhlich vor sich 
hin.
Der verwendete Code:
| 1 | #include <avr/io.h>
 | 
| 2 | #include <util/delay.h>
 | 
| 3 | 
 | 
| 4 | #define BAUD 9600UL
 | 
| 5 | #define UBRR_BAUD   ((F_CPU / (16UL * BAUD)) - 1)
 | 
| 6 | 
 | 
| 7 | void initialize_uart(void) {
 | 
| 8 |     // Baudrate einstellen (Normaler Modus)
 | 
| 9 |     UBRRH = (uint8_t) (UBRR_BAUD >> 8);
 | 
| 10 |     UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);
 | 
| 11 | 
 | 
| 12 |     // Aktivieren von receiver und transmitter
 | 
| 13 |     UCSRB = (1 << TXEN);
 | 
| 14 | 
 | 
| 15 |     // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
 | 
| 16 |     UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
 | 
| 17 | }
 | 
| 18 | 
 | 
| 19 | int main() {
 | 
| 20 |   initialize_uart();
 | 
| 21 |   const char OK = 'k';
 | 
| 22 |   const char NK = 'n';
 | 
| 23 |   const char TE = 't';
 | 
| 24 |   DDRA = 0x00;
 | 
| 25 |   DDRC = 0xFF;
 | 
| 26 |   while(1) {
 | 
| 27 |     _delay_ms(50.);
 | 
| 28 |     PORTC = 0xFF;
 | 
| 29 |     _delay_ms(50.);
 | 
| 30 |     PORTC = 0x00;
 | 
| 31 |     while(!(UCSRA & ( 1 << UDRE))) {}
 | 
| 32 |     PORTC = 0xff;
 | 
| 33 |     PORTC = 0x00;
 | 
| 34 |     if(PINA & 0x1) {
 | 
| 35 |       UDR = NK;
 | 
| 36 |     } else if(PINA & (1 << 1)){
 | 
| 37 |       UDR = TE;
 | 
| 38 |     } else {
 | 
| 39 |       UDR = OK;
 | 
| 40 |     }
 | 
| 41 |   }
 | 
| 42 | }
 | 
Weiss hier jemand wo das Problem liegt? Wir verzweifeln hier.
Gruß, Daniel