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)
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 | }
|
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.