Gleichzeitig Schleife durchlaufen und auf Knopfdruck warten.

Gast #1379364
Lesenswert?

Hallo, ich muss gerade ein Projekt für die Schule machen. Dabei nutze 
ich das Lemps12 Mikrocontroller System. Programmieren tu ich das ganze 
in C. Jetzt will ich ein Programm schreiben, das auf Knopfdruck beginnt 
die Messwerte eines Temperatursensors in einem Array zu Speichern und 
das in Abständen von 1 sek. Soweit so gut. Das Programm soll aber auch 
auf Knopfdruck mit dem Aufzeichnen stoppen. Und da komm ich nicht 
weiter. Das Problem ist das der Knopf ein Taster ist... also nur für 
kurze zeit 1 ist. Jetzt habe ich versucht mit einer for-schleife 
mehrmals hintereinander 50ms Pause zu machen und zu überprüfen ob der 
Taster zum abbrechen betätigt ist. Allerdings klappt das nicht....wäre 
sehr dankbar für jede Hilfe. Hier die Schleife für das Schreiben in das 
Array:
1
        while(1){                                   //messen
2
            Dat[MessNr]=ADR1H*2.5-420;              //Berechnung der Temperatur
3
            MessNr=MessNr+1;                                    
4
            for(i=1;i<=20;i++){                     //Schleife für Pause und Abbruch bei T2
5
                DelayXms(50);
6
                if (PORTD==2){
7
                    break;
8
                }
9
            }
10
        }
Hier das gesammte Programm:
1
#include <hc12.h>         /* Registerdefinitionen HC12 */  
2
#include <lbios_gcc.h>    /* Interface zu LBIOS Assemblerprogrammen */
3
#include <stdio.h>        /* C Standard I/O-Funktionen */
4

5
int main(void){
6
    int  MessNr,MessNrb, rzeit, i;
7
    unsigned char Dat[1000];
8
    LcdInit(&PORTH,&DDRH);                      //Initialisierung Lcd am PORTH
9
    LcdCursOff();                               //Cursor unsichtbar
10
    LcdCursSet(0x80);                           //Cursor Zeile 1 Spalte 1
11
    DDRD=0;                                     //Initialisierung
12
    DDRJ=0xff;
13
    AtdInit();
14
    
15
    while(1){                                    
16
        PORTJ=0;
17
        LcdClr();
18
        LcdCursSet(0x80);                                    
19
        LcdWrite("Taste 0 druecken");
20
        LcdCursSet(0xC0);                                    
21
        LcdWrite("um die Messung");
22
        LcdCursSet(0x90);                                    
23
        LcdWrite("zu starten...");
24
        
25
        while(PORTD!=1);                            //warte auf T0
26
        
27
        PORTJ=1;                                    //Kontrollleuchte=An
28
        MessNr=0;
29
        Zeichen='*';              
30
        while(1){                                   //messen
31
            Dat[MessNr]=ADR1H*2.5-420;              //Berechnung der Temperatur
32
            MessNr=MessNr+1;                                    
33
            for(i=1;i<=20;i++){                     //Schleife für Pause und Abbruch bei T2
34
                DelayXms(50);
35
                if (PORTD==2){
36
                    break;
37
                }
38
            }
39
        }
40
        
41
        LcdClr();
42
        LcdCursSet(0x80);                                    
43
        LcdWrite("Messung beendet.");
44
        PORTJ=0;
45
        while(PORTD!=128);                          //warte auf T7
46
        PORTJ=128;                                  //ausgeben
47
        printf("\n\n\n%u Lemps12 Messwerte\n",MessNr-1);
48
        printf("\nMW Nr:\t\n\n");
49
        for(MessNrb=1;MessNrb<MessNr;MessNrb++){
50
            printf("%u:\t%u Grad\n",MessNrb,Dat[MessNrb-1]);
51
        }
52
    }
53
    return 0;
54
}
Gast #1379372
Lesenswert?

Mach doch einfach
1
        while(!(PORTD&2)){                          //messen und Abbruch bei T2
2
            Dat[MessNr]=ADR1H*2.5-420;              //Berechnung der Temperatur
3
            MessNr=MessNr+1;
4
            for(i=1;i<=20;i++){                     //Schleife für Pause
5
                DelayXms(50);
6
            }
7
        }
Gast #1379449
Lesenswert?

oh ja... vielen dank für die schnelle hilfe! das sollte klappen! wieso 
sollte man die denn ausmaskieren, also was bringt das? verzeiht mein 
unswissen aber ich bin erst ganz neu in der materie ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren