Forum: Mikrocontroller und Digitale Elektronik MSP430 Programmsprung


von Domi (Gast)


Lesenswert?

Hallo

Für ein Schulprojekt beschäftige ich mich seit einem halben Jahr mit dem 
MSP430. Nun hab ich eine Frage zur C-Programmierung:
Kurz zusammengefasst ist meine Software so aufgebaut, dass zuerst alle 
I/Os, der Timer und der ADC initialisiert, danach paar Motoren 
ausgerichtet werden. Wenn dies erfolgreich war, folgt eine 
Endlosschleife, in der das eigentliche Programm abgearbeitet wird und 
immer wieder wiederholt wird.
Nun möchte ich einen interruptfähigen Stopp-Taster integrieren, der bei 
Betätigung das Programm stoppt und wieder an den Anfang der 
Endlosschleife zurückkehren lässt. Es soll also kein Reset ausgeführt 
werden, sondern das Programm soll einfach an eine bestimmte Stelle 
springen.

Hat jemand eine Idee wie man das in C programmiert?

Danke für eure Mithilfe.

Gruss Domi, Würenlos (CH)

von Tobias Korrmann (Gast)


Lesenswert?

Das ist nicht so schwierig
du packst deine Initialisierung in Funktionen.
Im Interrupt dienes Tasters setzt du ein Flag.
In deiner Hauptroutine fragst du dann diese Flag ab. Úngefähr so
1
void Ini(void)
2
{
3
  // Initialisierung diener Hardware
4
};
5
6
void Motor(void)
7
{
8
   // Motoransteuerung
9
};
10
11
.
12
.
13
main()
14
{
15
  Init()
16
  Motor()
17
  for(;;)
18
  {
19
     ...
20
     ...
21
     if(flag1 == true)
22
     {
23
       Init();
24
       Motor();
25
       flag1=false;
26
     }
27
   }
28
}
29
30
Interrupt Taster
31
{
32
  flag1=true;
33
}

von Christian Z. (fiselgrulm)


Lesenswert?

Wenn die Initialisierung aber nicht nochmal durchlaufen werden soll, 
würde ich in Tobias' Beispiel an der Stelle
1
if(flag1 == true)
2
     {
3
       Init();
4
       Motor();
5
       flag1=false;
6
     }

schreiben:
1
if(flag1 == true)
2
     {
3
       flag1=false;
4
       continue;
5
     }

Dann springt er direkt an den Anfang der Endlosschleife. Mal abgesehen 
davon, daß die Anweisung flag1=false; in jedem Fall im if-Block vor den 
anderen stehen muß - sonst wird sie nicht aufgerufen, da ja schon vorher 
rausgesprungen wird.

von MSPProfi (Gast)


Lesenswert?

Aufgrund der Tatsache, dass Schalter prellen würde ich hier auf jeden 
Fall noch eine Tastenentprellung rein programmieren.

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.