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;
}
}
Lesezeichen