Forum: Mikrocontroller und Digitale Elektronik von C zu Assembler (MS430)


von Slejden (Gast)


Lesenswert?

Hallo,

möchte das folgende Programm auf einen MS430 aufspielen.
1
int main()
2
{
3
  int menue;                                                  // Deklaration der lokalen Variablen
4
  int reiheA, i;
5
  int par, j;
6
  float zwischen, erg, eingeben = 0, Reihe_R, Summe;
7
8
  printf("Programm zur Berechnung der Widerst\x84nde in einer Reihen- oder Parallelschaltung\n");        // beginn des Programms mit der Abfrage was berechnet werden soll
9
  printf("1 f\x81r Reiehenschaltung \n2 f\x81r Parallelschaltung\n\n");
10
  scanf_s("%i", &menue);
11
  if (menue == 1)                        // <--------                  // folgende Schleife wird ausgeführt wenn 1 gedrückt wird
12
  {
13
    printf("Sie haben sich f\x81r die Reihenschaltung entschieden!\n\n");
14
    printf("Angaben bitte in Volt\n");
15
    printf("Wieviele Widerst\x84nde?\n");
16
    scanf_s("%i", &reiheA);
17
    printf("Geben Sie die erste Zahl ein:\n");
18
    for (i = 0; i < reiheA; i++)                                      // Schleife für Reihenschaltung
19
    {
20
      scanf_s("%f", &Reihe_R);
21
      Summe = Summe + Reihe_R;
22
      if (i < reiheA - 1)                                          // Schleife die Mitzählt bis zum Maximum der Widerstände
23
      {
24
        printf("Es fehlt noch eine!\n");
25
      }
26
      else
27
      {
28
        printf("--> Stop\n\n");
29
      }
30
    }
31
    printf("\n");
32
    printf("Ergebnis ist: %f V\n", Summe);
33
    printf("\n");
34
  }
35
  else if (menue == 2)            // <-------                // wenn 2 gedrückt wird, wird die Schleife ausgeführt ( Parallelschaltungsberechnung )
36
  {
37
    printf("Sie haben sich f\x81r die Parallelschaltung entschieden!\n\n");
38
    printf("Angaben bitte in Ohm\n");
39
    printf("Wieviele Widerst\x84nde sind parallel?\n");
40
    scanf_s("%i", &par);
41
    printf("Geben Sie bitte den ersten Widerstand ein\n");
42
    for (j = 0; j < par; j++)                        // Schleife für Parallelschaltung
43
    {
44
      printf("Eingeben und durch Enter best\x84tigen\n\n");        // Eingabe der Widerstandswerte
45
      scanf_s("%f", &zwischen);
46
      eingeben = eingeben + (1 / zwischen);                // Berechnung der Widerstandswerte
47
    }
48
    erg = 1 / eingeben;
49
    printf("Ergebnis: %f \n\n", erg);
50
    printf("Stop\n\n");
51
  }
52
  else
53
  {
54
    // <--------
55
  }
56
  {
57
    printf("Falsche Eingabe\n");                      // Falls weder 1 noch 2 eingegeben wurden
58
  }
59
  printf("Bis dann!");
60
  return 0;
61
}

Mein Problem ist die Herangehensweise. Dachte mir zu Erst das Programm 
in C zu Schreiben. Nun im Anschluss in Assemblercode transformieren. Ist 
das soweit annehmbar?
Nun zu Assembler: natürlich müssen die Deklarationen geändert werden. 
Eine float-Zahl ist in meinem Fall eine qN-Wert. q Defniert dabei eine 
Kommazahl bis hoch 16, wenn ich nicht irre. Nach der Wandlung muss ich 
was tun?

von Sven B. (scummos)


Lesenswert?

Die Idee ist gut. Was du suchst ist ein C-Compiler, der den Schritt C -> 
ASM für dich übernimmt. :D

Floating Point ist, äh, sehr kompliziert und sollte dem Compiler 
überlassen werden.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Slejden schrieb:
> Dachte mir zu Erst das Programm in C zu Schreiben.

Das hast Du ja schon.

> Nun im Anschluss in Assemblercode transformieren.

Wozu? Aus dem C-Programm erzeugt Dein Compiler ein auf dem µC 
lauffähiges Programm.


Du musst Dich nur darum kümmern, wohin printf() und Co. ihre Ausgaben 
senden und woher scanf() seine Eingaben bekommt.

Welches msp430-Familienmitglied willst Du denn verwenden?

Und welchen tieferen Sinn hat es, ein offensichtlich interaktives 
Programm, das Bildschirm- und Tastatureingaben benutzt, auf einem µC 
laufen zu lassen?

von Karl H. (kbuchegg)


Lesenswert?

Rufus Τ. F. schrieb:

> Und welchen tieferen Sinn hat es, ein offensichtlich interaktives
> Programm, das Bildschirm- und Tastatureingaben benutzt, auf einem µC
> laufen zu lassen?

Denn das ist eigentlich meistens eines der Hauptprobleme. Ein µC dieser 
Größenklasse hat normalerweise keinen Bildschirm und auch keine 
Tastatur. D.h. man muss sich hier andere Vorgehensweisen einfallen 
lassen, wie zb die Ansteuerung eines (textuellen) LCD oder die Benutzung 
eines Drehencoders um Werte einzugeben, oder eine Matrixtastatur oder 
.... Das alles wird aber meistens um ein vielfaches mehr 
Programmieraufwand bedeuten, als so eine popelige Berechnung eines 
Parallelwiderstands.
Und wenn man den µC zb per UART an ein Terminalprgramm hängt (wer hat 
schon noch ein echtes Terminal), dann erhebt sich die Frage: warum so 
kompliziert und warum nicht gleich direkt am PC?

Kurz und gut: Mit der einzigen Ausnahme, dass es sich hierbei um eine 
Schulaufgabe handelt, ist die ganze Aufgabenstellung so, dass man sie 
nicht auf einem µC lösen würde. Zumindest nicht so. Auf einem 4 zeiligen 
LCD mit 20 Zeichen pro Zeile wird man eine ganz andere Form der 
Benutzerführung implementieren.

: Bearbeitet durch User
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.