Gast
#273479
Hallo,
Ich versuche jetzt schon ewig eine serielle Datenübertragung zwischen 2
ATMEGA 8 zu programmieren, es will jedoch nicht funktionieren. Hier
meine beiden Codes. Vielleicht kann mir jemand sagen was ich falsch
mache.
(Quarz: 14,7456MHz)
Transmitter:_________________________________________________________
#include<stdio.h>
#include <mega8.h>
#include<delay.h>
void init ();
char i=0;
char werte[6] = {0x20,0x10,0x08,0x04,0x02,0x01};
//======================================================================
===========================
// Hauptprogramm
void main ()
{
init();
UDR=0x00;
UCSRA = UCSRA & 0xBF;
while (1)
{
}
}//main
//======================================================================
===========================
void init ()
{
DDRD=0x00;
DDRC=0xFF;
DDRB=0x00;
UCSRA=0x00;
UCSRB=0x48; //Transmitter enable
UCSRC=0x86; //
UBRRH=0x00; //Baudrateneinstellung
UBRRL=0x03; //Baudrateneinstellung (UBRRL&UBRRH
ergibt eine Baudrate von 230400 BAUD)
SREG=0x80; //Global Interrupt Flag = 1
GICR|=0x00; //Initialisierung externe Interrupts
MCUCR=0x00; //Initialisierung externe Interrupts
}//void
//======================================================================
===========================
interrupt [USART_TXC] void Transmit(void)
{
delay_ms(100);
UDR = werte[i];
i++;
if (i<=5)
{
i=0;
}
UCSRA = UCSRA & 0xBF;
}
Receiver:________________________________________________________
#include<stdio.h>
#include <mega8.h>
#include<delay.h>
#define LED PORTD
void init ();
unsigned char wert=0;
//======================================================================
===========================
// Hauptprogramm
void main ()
{
init();
while (1)
{
LED=wert;
}
}//main
//======================================================================
===========================
void init ()
{
DDRD=0x00;
DDRC=0xFF;
DDRB=0x00;
UCSRA=0x00;
UCSRB=0x90; //Transmitter enable
UCSRC=0x86; //
UBRRH=0x00; //Baudrateneinstellung
UBRRL=0x03; //Baudrateneinstellung (UBRRL&UBRRH
ergibt eine Baudrate von 230400 BAUD)
SREG=0x80; //Global Interrupt Flag = 1
GICR|=0x00; //Initialisierung externe Interrupts
MCUCR=0x00; //Initialisierung externe
Interrupts }//void
//======================================================================
===========================
interrupt [USART_RXC] void Receive(void)
{
wert=UDR;
UCSRA = UCSRA & 0x7F;
}