MSP430 Programmsprung

Gast #1191653
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)
Gast #1191783
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
}
#1192307
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.