Zeig doch mal den ganzen Code.
Druckbare Version
Zeig doch mal den ganzen Code.
Hi,
Hast du eine main Funktion?
Am besten du postest mal deinen Code, nur mit der
Fehlermeldung ist es schwer was zu sagen.
mfg
Thorsten
Oh oh ich befürchte schlimmes ;)
das ist mein ganzer code. Ich wette jetzt wirds peinlich für mich 8-[Code:#include <inttypes.h>
#include <avr/io.h>
#include <avr/signal.h>
#include <string.h>
void USART_Init (unsigned int baud)
{
/* Set baud rate */
UBRR0H = (unsigned char)(baud>>8);
UBRR0L = (unsigned char)baud;
/* Enable reciever and transmitter */
UCSR0B = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit*/
UCSR0C = (1<<USBS)|(3<<UCSZ0);
}
void USART_Transmit (unsigned char data)
{
/* Wait for empty transmit buffer */
while(!(UCSR0A & (1<<UDRE)))
;
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART_Recieve(void)
{
/* Wait for data to be recieved */
while (!(UCSR0A & (1<<RXC)))
;
/* Get and return recieved data from buffer */
return UDR0;
}
MFG
Da Du es selbst bemerkt hat hält sich die Peinlichkeit in Grenzen :)
int main(void)
{
// mach irgendwas
return 1
}
also in die main könnte ich doch schreiben, das er immer "Hallo" sendet oder?
Wie müsste der Code dazu aussehen? Muss ich dann eine function haben mit der ich ganze strings anstatt einzelner zeichen senden kann? zb. so:
um dann mitCode:void send_string(char wort[])
{
unsigned int index=0;
while(wort[index] != '\0')
{
sendTxd1(wort[index]);
index++;
}
return;
}
Hallo zu senden.Code:send_string("Hallo");
MFG
Hi Daniel,
ist das wirklich den ganzer Code??????
Da fehlt die main!! Du deklarierst zwar schön die Funktionen USART_Init, USART_Transmit und USART_Recieve aber du hast keine Main!
Du musst jetzt halt noch sowas einbinden um per USART Datenpakete zu verschicken:
das nurmal als Beispiel um die Funktionen zu verwenden!Code:int main(void)
{
//USART aktivieren mit einer Baudrate von 9600 Baud
USART_Init(9600);
//Endlosschleife
for(;;)
{
//2 über USART verschicken
USART_Transmit(2);
}
}
um deine Empfangsfunktion zu verwenden sowas:
Gruß MichiCode:
unsigned char test = 0;
int main(void)
{
//USART aktivieren mit einer Baudrate von 9600 Baud
USART_Init(9600);
//Endlosschleife
for(;;)
{
//Über USART das Datenpaket empfangen und in die Variable test schreiben
test = USART_Recieve()
//den Inhalt von test per USART verschicken
USART_Transmit(test);
}
}
oh man ich habe noch viel zu lernen :D.
Ok damit versuch ichs mal.
würde denn meine funktion funktionieren? Also wegen den ganzen wörtern die ich senden will.
MFG
Hi,
ok versuch's mal mit meinem!
ich weiß jetzt nicht ob deiner klappt aber ich hätte das eher so gelöst:
Gruß MichiCode:void send_string(unsigned char *wort)
{
while(*wort)
{
sendTxd1(wort++);
}
return 0;
}
Das mit dem Baudrate initialisieren ist falsch. Les' bitte mal im Datenblatt des Chips nach wie der Wert berechnet wird.
@michael: Du bekommst bei Deiner Funktion mindestens ein Warning des Compilers weil Du einen int aus einer void Funktion zurück gibst.
Hi,
aber spätestens dann wird man es umändern!Zitat:
@michael: Du bekommst bei Deiner Funktion mindestens ein Warning des Compilers weil Du einen int aus einer void Funktion zurück gibst.
Stimmt mit der Baudrate hab ich gar nicht darauf geachtet!!
Des müsste dann doch so heißen oder?:
undCode:#define F_CPU 16000000
#define UART_BAUD_RATE 9600
#define UART_BAUD_SELECT (uint)(F_CPU/(UART_BAUD_RATE*16l)-1)
Gruß MichiCode:UBRRH = UART_BAUD_SELECT >> 8;
UBRRL = UART_BAUD_SELECT;