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
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
Open Minds. Open Sources. Open Future
Oh oh ich befürchte schlimmes
das ist mein ganzer code. Ich wette jetzt wirds peinlich für michCode:#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
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
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
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
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.
Ok damit versuch ichs mal.
würde denn meine funktion funktionieren? Also wegen den ganzen wörtern die ich senden will.
MFG
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
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!@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;
Lesezeichen