Hallo,
ich weiß, dass dieses Thema schon reichlich beackert wurde, aber ich bin
neue und habe zu meinem Problem tatsächlich noch keine passende Lösung
gefunden.
Ich möchte per USART Nach empfang von Zeichen eine Led anmachen leider
fünktioniert nicht.
Ich habe ausprobiert die empfangene Zeichen wieder zu senden, und alles
klappt super, senden auch nurdass es tut nichst wenn er entweder 0 oder
1 empfängt.
hier unten den Code
1
#ifndef F_CPU
2
/* In the new version of the WinAVR/Mfile Makefile guideline One can defined F_CPU in the Makefile, a repeated definition here would lead to a compiler warning . therefore "prevention" through #ifndef/#endif This "Prevention" can lead to Debugger, if AVRStudio use a another, not the hardware fitting Clock rate: Then the following definition doesn't use, but instead the default value (1 MHz?) of AVRStudio - hence the Output of a warning if F_CPU yet does not define:*/
3
#warning "F_CPU was not defined yet, now make up with 3686400"
> Ich habe ausprobiert die empfangene Zeichen wieder zu senden, und alles> klappt super, senden auch nurdass es tut nichst wenn er entweder 0 oder> 1 empfängt.
Du empfängst nicht 0 oder 1.
Du empfängst '0' oder '1'. Das ist etwas anderes. Das sind Zeichen, so
wie 'a', 'b' oder 'c'. Nur dass sie eben Ziffern-Zeichen sind.
henry schrieb:
> do> {> c=UART_Getc();
An dieser Stelle ist es IMMER gut, das empfangene Zeichen auch wieder
zurück zu senden, damit man im Terminal kontrollieren kann, was der µC
empfangen hat.
> if (c!='\r')
Bist du sicher, dass dein Terminal einen \r schickt, wenn du auf Return
drückst?
In vielen Terminals kann man das einstellen, ob es dann \n, \r oder
beides schicken soll
> *s=0;
schreib das so:
*s = '\0';
ist zwar genau das gleiche. Aber man sieht besser, dass es sich hier um
eine Zuweisung eines Zeichens handelt.
danke für die Hilfe
leider geht nicht.
Das code unten habe ich direckt in main geschrieben und es ging.
Warum gibt meine Funktion dann kein string zurück?
Habe ich mir gedacht, dass meinem String nicht gespeichert würde, dann
Habe ich string als Static initialisiert leider ging immer nicht.
Kannst du mir etwas empfehlen?!
Womit sich dann natürlich die Frage erhebt, wie eigentlich test
definiert ist
while(1)
{
test = UART_Gets();
UART_Puts( "\r\n" );
UART_Puts( "eingegebender Text: " );
UART_Puts( test );
UART_Puts( "\r\n" );
Da müsste der Compiler eigentlich einen Haufen Warnings und Errors
ausgeben.
henry schrieb:
> danke für die Hilfe> leider geht nicht.
Deine ganze Funktion ist falsch aufgebaut.
Strings sind in C immer ein Problem.
Am besten ist immer noch die Methode, wenn man der Funktion ein
char-Array als Argument mitgibt (zusammen mit der Größe des Arrays) und
die Funktion dort ihre Ergüsse hineinstellt.
> Das code unten habe ich direckt in main geschrieben und es ging.> Warum gibt meine Funktion dann kein string zurück?
Weil der return Wert deiner Funktion nun mal unsigned char ist. Und das
ist kein String, sondern nur ein einzelnes Zeichen.
Karl heinz Buchegger schrieb:
>Strings sind in C immer ein Problem.>Am besten ist immer noch die Methode, wenn man der Funktion ein>char-Array als Argument mitgibt (zusammen mit der Größe des Arrays) und>die Funktion dort ihre Ergüsse hineinstellt.
Danke für die Anweisung.
hier unten den Code umgeschrieben, und jetzt kriege ich keine
Fehlermeldungen und Warnungen leider funktioniert immer noch nicht.
Bitte um Hilfe
1
#ifndef F_CPU
2
/* In the new version of the WinAVR/Mfile Makefile guideline One can defined F_CPU in the Makefile, a repeated
3
definition here would lead to a compiler warning . therefore "prevention" through #ifndef/#endif
4
5
This "Prevention" can lead to Debugger, if AVRStudio use a another, not the hardware fitting Clock rate:
6
Then the following definition doesn't use, but instead the default value (1 MHz?) of AVRStudio - hence
7
the Output of a warning if F_CPU yet does not define:*/
8
#warning "F_CPU was not defined yet, now make up with 3686400"
9
#define F_CPU 4000000 //3686400L // Systemtakt in Hz - define as long>> Without errors in the computation