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 | }
|