tanger
15.10.2006, 09:22
Hi,
ich hab das unten angehangene Program auf meinen ATMega32 gefalshed ich bekomme allerdings egal welches zeichen ich sende immer das gleiche zurück (À).
SYSCLK und BAUD sind natürlich angepasst
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define SYSCLK 7372800
#define BAUD 38400UL
#define UBRR_BAUD ((SYSCLK/(16*BAUD))-1)
/* USART initialisieren */
void uart_init(void);
void init(void);
int main(void)
{
/* USART initialisieren */
uart_init();
sei();
/* Nichts tun. Die Interrupts erledigten den Rest */
while (1)
;
}
void uart_init(void)
{
/* Baudrate einstellen ( Normaler Modus ) */
UBRRH = (unsigned char) (UBRR_BAUD>>8);
UBRRL = (unsigned char) UBRR_BAUD;
/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
/* Interrupt wird ausgelöst sobald neue Daten im USART-Empfangspuffer liegen */
SIGNAL(SIG_UART_RECV)
{
unsigned char buffer;
/* Daten aus dem Puffer lesen ... */
buffer = UDR;
/* ... warten bis der Sendepuffer leer ist ... */
while ( !( UCSRA & (1<<UDRE)) )
;
/* ... und gleich wieder zurück schicken */
UDR = buffer;
}
void init(void)
{
DDRB = 0xff; // PortB als Ausgang deklarieren
PORTB = 0x00; // Ports auf LOW schalten
}
ich hab das unten angehangene Program auf meinen ATMega32 gefalshed ich bekomme allerdings egal welches zeichen ich sende immer das gleiche zurück (À).
SYSCLK und BAUD sind natürlich angepasst
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define SYSCLK 7372800
#define BAUD 38400UL
#define UBRR_BAUD ((SYSCLK/(16*BAUD))-1)
/* USART initialisieren */
void uart_init(void);
void init(void);
int main(void)
{
/* USART initialisieren */
uart_init();
sei();
/* Nichts tun. Die Interrupts erledigten den Rest */
while (1)
;
}
void uart_init(void)
{
/* Baudrate einstellen ( Normaler Modus ) */
UBRRH = (unsigned char) (UBRR_BAUD>>8);
UBRRL = (unsigned char) UBRR_BAUD;
/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
/* Interrupt wird ausgelöst sobald neue Daten im USART-Empfangspuffer liegen */
SIGNAL(SIG_UART_RECV)
{
unsigned char buffer;
/* Daten aus dem Puffer lesen ... */
buffer = UDR;
/* ... warten bis der Sendepuffer leer ist ... */
while ( !( UCSRA & (1<<UDRE)) )
;
/* ... und gleich wieder zurück schicken */
UDR = buffer;
}
void init(void)
{
DDRB = 0xff; // PortB als Ausgang deklarieren
PORTB = 0x00; // Ports auf LOW schalten
}