usart string

Gast #359537
Lesenswert?

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 #359539
Lesenswert?

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 #359542
Lesenswert?

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
#359543
Lesenswert?

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 #359544
Lesenswert?

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 #359546
Lesenswert?

*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 #359547
Lesenswert?

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 #359558
Lesenswert?

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");
#359564
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren