Forum: Mikrocontroller und Digitale Elektronik u-Controller-Programmierung


von Falko98 (Gast)


Lesenswert?

hallo leute,

ich hab da ein problem,
ich arbeite das erste mal nem u-Controller
und möchte, dass er über eine rs232 schnittstelle mit
meinem java-programm kommuniziert.

mein problem ist, dass ich nicht weiß,
wie ich die daten auf dem u-controller mittels c auffangen soll und
die veränderten daten dann zurück schicken soll.

vom java programm kommt ein string ==> wird vom u-Controller
verarbeiter durch c ==> und schickt dann einen string wieder zurück zum 
java-programm.

kann mir da jemand helfen???

        Gruß Falko98

von Stefan (Gast)


Lesenswert?

Da können viele helfen, wenn sie den Typ des µC kennen und die benutzte 
Entwicklungsumgebung für den µC.

von Meister Lampe (Gast)


Lesenswert?

Wie schaut Dein Protokoll aus?
Zeig mal dein Code was Du hast bisher. UART init usw...

von Falko98 (Gast)


Lesenswert?

nunja, der controller ist ein at 8051 auf einem demoboard
das java-programm habe ich mit netbeans gschrieben
und für den code am demoboard arbeite ich mit Keil uVision2

zurzeit habe ich nur den java code, um vernünftig weiter zuarbeiten 
brauche ich mal eine testversion zum überprüfen, ob es überhaupt 
funktioniert.

im grunde muss ich nur wissen, wie ich die programmierung mache zum 
empfangen und senden. und wie ich den String rüberbekomme.

von Karl heinz B. (kbucheg)


Lesenswert?

> im grunde muss ich nur wissen, wie ich die programmierung mache zum
> empfangen und senden

Für das Senden und Empfangen am µC schaust du einfach
mal ins Tutorial (entweder Asm oder C, am besten beides).
Ganz nach oben scrollen, ganz links, unter 'AVR'

von Joe (Gast)


Lesenswert?

Karl Heinz,

das nutzt nichts das AVR Tutorial zu lesen denn 8051 ist kein AVR.

Keil uVision, du programmierst also in C ? Das Hello World Beispiel 
Programm (bestandteil des C Compiler) enthält ein UART Beispiel.

Reicht es für den Anfang ein "Echo" von der UART zu bekommen ?

Hast du überhaupt schon irgendein funktionsfähiges Programm für deinen 
Controller am laufen z.B. Blinky (ist auch als DEMO dabei) ?

Beschreibe bitte deinen Wissensstand.

von Karl heinz B. (kbucheg)


Lesenswert?

> das nutzt nichts das AVR Tutorial zu lesen denn 8051 ist kein AVR.

Ah, sorry. Hab ich überlesen.


von Peter R. (falko98)


Lesenswert?

ich hab schon ein paar programme für den uC ist aber nichts, wo ich über 
eine rs232 komunizieren muss. Sind einfache Blinklichter/Lauflichter 
nichts besonderes.

Bei dem programm das ich jetzt mache habe ich einen Taschenrechner, über 
eine java- oberfläche werden die zahlen und die operatoren eingegeben 
und über rs232 zum uC gesendet. der verarbeitet das dann und zurück 
bekomme ich ebenfalls über die rs232 das ergebniss.

die java- Oberfläche und die berechnung am uC sind nicht das problem. 
mein problem ist, dass ich nicht weiss, wie ich den String (mit den 
Zahlen und den Operatoren) auf den uC bekomme und anschließend das 
ergebniss zurück.

von Peter D. (peda)


Lesenswert?

Falko98 wrote:

> mein problem ist, dass ich nicht weiß,
> wie ich die daten auf dem u-controller mittels c auffangen soll und
> die veränderten daten dann zurück schicken soll.


C hat dafür keine Funktionen, die mußt Du schon selber schreiben oder 
Beispiele lesen.

Zum Anfang würde ich als Protokoll Text-Daten empfehlen, die mit CR und 
oder LF abgeschlossen sind.

Die liest Du dann in einen Puffer (char-Feld) ein, bis eben CR/LF kommt 
und hängst noch ne /0 an.
Dann kannst Du das Feld bearbeiten, wie Du lustig bist (strncmp, sscanf 
usw.).
Und die einzelnen Bytes wieder senden.

Wenn das funktioniert, kann man das Einsammeln und Senden der Bits in 
den Puffer als Interrupthandler schreiben.


Peter

von Peter R. (falko98)


Lesenswert?

ich hab mal im internet noch ein wenig herumgeschaut und das angefunden:

fürs senden:
void senden(void)
{
  int u;
  u=0;
  l=strlen(test);
  for(u=0;u<=(l-1);u++)
  {
    S1BUF=test[u];
    while((S1CON&0x02)==0x00)
      ;
    S1CON&=0xFD;
  }
  blank_lcd();
  print_lcd(1,1,"Gesendet");

}

fürs empfangen:
void serISR(void) interrupt 16
{
  if((S1CON&0x01)==0x01)
  {
    S1CON&=0xFE;
    empf[e]=S1BUF;
    if(empf[e]=='#')
    {
      serflag=1;
    }
    else
      e++;
  }
}

jetzt ist mein problem, das ich das nicht verstehe. dieses programm ist 
für ein demoboard gedacht und ich kann mit den ganzen variablen nichts 
anfagen.
kann mir einer von euch erklären, was das ganze bedeutet???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.