usart string

Gast #359537
HAllo.Arbeite mit den Atmega16L und habe leider ein kleines Problem.
Programiere in c und steuer mit dem Mikrocontroller ein
Bluetoothmodul.
Befehle kann ich dem Modul (über USART )mitteilen und das fuinzt auch
soweit.Die Befehle übertrage ich in   Hex Zahlen .Nun möchte ich aber
zb. eine Adresse wie zb. 12 34 56 78 9A BC über USART versenden.Und
genau da fehlen mir gerade die IDEEN wie ich das sinvoll, und optimiert
hinbekomme.Denke da an einen ARRAY oder so.Kenn jemand vielleicht eine
Lösung?Also die einzelne Zeichen übertrage ich so:
void sende_Bluetooth(unsigned char a)
{
while (! UCSRA & (1<<UDRE)));
UDR =a;
}
Gast
Hallo nochmal.Also zb beispiel möchte ich jetzt "Name" über USART
senden.

meine Sende Funktion steht ja oben.Möchte dann Name byte für byte
übertragen.Hoffe das macht dies verständlicher .Thx schon mal
Gast
Also verstehe ich das richtig.Das ich das mit eine  Array machen soll
der dann immer wieder eine stelle (Adresse) nach jedem gesendeten
Zeichen weiterrücken soll?Oder nicht?
Gast
Hi Bjöern.Also ich verstehe jetzt schon wie es gemacht wird.Habe
zuätzlich zu mein Funktion die Funktion SendeString(char *s)
geschrieben welche die Zeichen nach Fifo einzelnd übermittel soll.Aber
wie soll ich denn zb "Name" im meinen programm definieren und damit
dann
auch übergeben?also es liegt eher am syntax bei mir .sorry
uart_puts_P("\r\n-= Luefter Test Aplication =-\r\n");
============

Nocheinmal Fleury UART diese Funktion untersuchen......
Ich fange auch erst mit C an und kann ein bischen Delphi und Basic,
also wenn das fuer mich anschaulich ist, solltest Du das auch
hinbekommen !

mfg,
Bjoern
Gast
hi nochmal.
also meine Funktion ist:

void Sendenstring(char *s)
{
   while (*s)
   {
    USART_Transmit(*s);
s++;
}
}
das müßte eiogentlich richtig sein.Mein Problem ist wie definiere ich
jetzt mein String un wie übergebe ich ihn?Bekomme da die ganze Zeit
Fehlermeldung
Möchte gerne "Name" übertragen .Byte für Byte
Gast
Habe auch noch eine allgemeine Frage.Kann man Die Daten, die man über
USART zu einem anderen Modul schickt über eine TerminalProgramm
überwachen
bzw sehen was man verbrochen hat?
Gast
*s ist eine Zeigervariable die innerhalb deiner Funktion die Adresse
deines String beinhaltet.

volatile char Array_feld_Name[4]; //Deklarieren eines Datenfeld

void main(void)
{
  Array_feld_Name[0]='N'; //Datenfeld mit Ascii-Zeichen füllen
  Array_feld_Name[1]='a'; //geht auch anders
  Array_feld_Name[2]='m';
  Array_feld_Name[3]='e';
  Sendenstring(Array_feld_Name);// Deine Sendefunktion aufrufen
}

void Sendenstring(char *s) //hier wird jetzt die Adresse deines Array
{                          //übernommen
   while (*s)
   {
    USART_Transmit(*s);
    s++;
   }
}
Persönliche Seite
Das geht in die Hose. Mit ziemlicher Sicherheit.

Woran erkennt die Funktion "Sendenstring" das Ende des übergebenen
Strings?

   while (*s)

Am Null-Zeichen, mit dem der String terminiert ... sein sollte, aber
nicht ist.

Array_feld_Name muss Platz für (mindestens) fünf Zeichen bieten und
das letzte Array-Element muss mit 0 besetzt werden, da sonst die
Stringendeüberprüfung in "Sendenstring" kein Stringende findet,
sondern munter weiter den Speicherinhalt ausgibt, bis zufällig mal eine
Null vorbeikommt ...
Gast
Hallo.Ja da hast du ja recht.Habe jetzt die Funktion so aufgerufen wie
dues gesagt hast.Bekomme immer die Fehlermeldung
function parameter# 1 incompatible with its declaration
Gast
also habe die Funktion um einzelne Bytes zu senden :

void USART_Transmit(unsigned char a)


{
while (!(UCSRA & (1<<UDRE)))
;
UDR=a;
}

dann um einen string zu senden:

void Senden_Von_String( char *s)
{
        while(*s)
        {
                USART_Transmit(*s);
                        s++;
        }
}

nun möchte ich "Name" senden:

Senden_Von_String("Name");
Und auf welchen Aufruf bezieht sich jetzt die Fehlermeldung?

(Ist es wirklich so schwer ein kompilierbares, vollständiges
Program zu posten, sodass wir das einfach mal testweise
durch unsere Compiler jagen um zu sehen, was die dazu zu
sagen haben)
Was wolltest du eigentlich damit?

#define name n[9]


Hängt das mit dem 'n' in Change_Bloototh_Name zusammen.
Wolltest du etwa eine globale Variable 'n' definieren?

Das geht dann so:


char n[9];



und irgendwo weist du dem was zu:

int main()
{
  ...
  strcpy( n, "Hallo" );

}

oder so:

char n[] = "Hallo";


Auf jeden Fall aber: kauf dir ein Buch!!!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.