Wenns denn sein muß könnte ich schon einen Beispielcode beisteuern. Ein funktionieren der C Code sollte besser sein als ein .hex file. Ich hätte z.B. ein einfaches UART Echo.
Sollte gehen, habe nur mein restliches Programm entfernt um den Code kurz zu halten. Gff die Datenrichtungen ein bischen anpassen, je nach Hardware.
Code:#include <inttypes.h> #include <avr/io.h> #define BAUD 1200UL #define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1) // USART initialisieren void uart_init(void) { // Baudrate einstellen (Normaler Modus) UBRR0H = (uint8_t) (UBRR_BAUD>>8); UBRR0L = (uint8_t) (UBRR_BAUD & 0x0ff); // Aktivieren von receiver und transmitter UCSR0B = (1<<RXEN0)|(1<<TXEN0); // Einstellen des Datenformats: 8 Datenbits, 2 Stoppbit UCSR0C = (1<<UCSZ01)|(1<<UCSZ00)|(1<<USBS0); } void init_2(void) { DDRB = 63 ; // LED Driver outputs DDRD = 254 ; // outputs except RXD DDRC = 3+32 ; // PC0,PC1,PC5 outputs (LED Kathodes) sei(); } int main(void) { uint8_t buffer; init_2(); // in/out initialisieren, interupts freigeben uart_init(); // USART initialisieren while ( !( UCSR0A & (1<<UDRE0)) ) ; // Warten bis der Sendepuffer frei ist UDR0 = 'A'; while ( !( UCSR0A & (1<<UDRE0)) ) ; // Warten bis der Sendepuffer frei ist UDR0 = 'B'; while (1) { // Warten bis Daten empfangen wurden while ( !(UCSR0A & (1<<RXC0)) ) ; // Empfangsregister auslesen buffer = UDR0; // Warten bis der Sendepuffer frei ist while ( !( UCSR0A & (1<<UDRE0)) ) ; // Daten in den Puffer schreiben und damit senden UDR0 = buffer; } }







Zitieren

Lesezeichen