Forum: Mikrocontroller und Digitale Elektronik Programm läuft nur einmal ab


von Schmolke (Gast)


Lesenswert?

Hallo ich weiß nicht wirklich warum der mc des programm nicht ständig 
ablaufen läst..

also ich hab nen etwas größeres programm geschrieben aber zwecks 
fehlersuche hab ich es mal wirklich sehr stark reduziert..

Ich benutze einen PIC 18F4685

#define _PIC18Fxxx
#include <18F4685.h>

#fuses INTRC_IO, NOMCLR, NOWDT, NOPROTECT, DEBUG // auf internen RC 
laufen
#use delay(clock=2000000)


void main(){
if (input(PIN_D1))
{output_high(PIN_D0);
}
else
 output_low(PIN_D0);
}

//
ich benutz mplab mit CCS C compiler
weiß jemand vielleicht woran es liegen könnte?!

ich hatte es einmal des es lief und eigentlich nix geändert aber als ich 
dann das pic kit 3 abgezogen habe lief nix mehr...

aber so wie ich es jetzt da stehen habe läuft es nur einmal runter und 
bleibt dann stehen

hatte schonmal ein do, while drin (hört sich zwar bloed an aber na ja) 
hat auch nicht geholfen

danke schonmal für eventuelle antworten

von Hallodre (Gast)


Lesenswert?

Du musst eine Schleife einbauen!

von Schmolke (Gast)


Lesenswert?

ja und wie genau!?

von Miche (Gast)


Lesenswert?

probiers mal mit
1
#define _PIC18Fxxx
2
#include <18F4685.h>
3
4
#fuses INTRC_IO, NOMCLR, NOWDT, NOPROTECT, DEBUG // auf internen RC
5
laufen
6
#use delay(clock=2000000)
7
8
9
void main(){
10
  while (1) {
11
   if (input(PIN_D1))
12
        {output_high(PIN_D0);
13
     }else {
14
    output_low(PIN_D0);
15
    }
16
  }
17
}

von Schmolke (Gast)


Lesenswert?

ja also das es ein schleifen prob ist das hab ich mir schon gedacht..
(weil es halt nur einmal abläuft)

von Florian M. (flomll)


Lesenswert?

Hy ich habe zwar noch nichts mit PIC gemacht, jedoch sollte das auch 
hier gelten:

[c]
void main(){

    while(1)
    {
        if (input(PIN_D1))
        {
           output_high(PIN_D0);
        }
        ...
    }
}
[\c]

ohne diese while(1) würde das ja nur einmal durchlaufen! Hoffe, dass ich 
dein Problem richtig verstanden habe!

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
ich gebe meinem Vorredner Recht. Ohne Schleife läuft das ganze nur 
einmal ab, bei den heutigen Taktfrequenzen also ziemlich schnell.
Versuche es mal mit:
1
while (1) { 
2
    //dein Code
3
 }
4
return 0;
Gruß Jannis

von Schmolke (Gast)


Lesenswert?

Executing: "D:\Program Files\PICC\Ccsc.exe" +FH "main.c" +DF +LN +T +A 
+M +Z +Y=9 +EA
*** Error 48 "main.c" Line 10(1,22): Expecting a (
      1 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Thu Mar 24 14:05:36 2011


das sagt mir die build... wo soll denn da ne klammer fehlen!?=

von Schmolke (Gast)


Lesenswert?

ok des war mein fehler hatte da den text zur beschreibung ned hinter die 
// geschrieben..

ok jetzt macht er folgendes..
des programm wartet jetzt quasi bis ich den pin auf high habe.. aber 
sobald das ist.. geht er nicht mehr auf low wenn der Input pin auf low 
geht..

quasi als hätte ich ne selbsthaltung

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Schmolke schrieb:
> wo soll denn da ne klammer fehlen!?=

In Deinem Quelltext. Den wir hier nicht sehen.

von Schmolke (Gast)


Lesenswert?

#define _PIC18Fxxx
#include <18F4685.h>

#fuses INTRC_IO, NOMCLR, NOWDT, NOPROTECT, // auf internen RC
#use delay(clock=2000000)

void main()
{
while (1) {
if (input(PIN_D1)==1)
{output_high(PIN_D0);
     }
else
output_low(PIN_D0);
}
}


;) ok des ist er jetzt mit while.. wenn ich jetzt return rein baue dann 
erkennt er das als command.. aber wenn ich es innerhalb der void mache 
dann sagt er mir nach dem build (böse böse das return kann ned in der 
void stehen)
wenn ich es unter die void main mache dann will er es deklariert haben 
obwohl er es als command erkennt..

von Schmolke (Gast)


Lesenswert?

ok um alle beteiligten zu beruhigen.. es läuft :-) habe jetzt einen pull 
down drine (hatte ihn auf dem testboard ned dauf )
aber jetzt läuft es..

danke für die sehr schnelle hilfe

von Frank B. (f-baer)


Lesenswert?

Schmolke schrieb:
> ;) ok des ist er jetzt mit while.. wenn ich jetzt return rein baue dann
> erkennt er das als command.. aber wenn ich es innerhalb der void mache
> dann sagt er mir nach dem build (böse böse das return kann ned in der
> void stehen)
> wenn ich es unter die void main mache dann will er es deklariert haben
> obwohl er es als command erkennt..

Was willst du mit einem return? Ein return hat in der main-Funktion 
nichts zu suchen! Du solltest mal klare und verständliche Sätze 
formulieren, vorzugsweise mit Groß- und Kleinschreibung.

von Jannis C. (kabelwurm)


Lesenswert?

Hallo,
erstmal wegen der Übersichtlichkeit, ist es sinnvoll den Code 
einzurücken.
Macht man am Anfang eigentlich immer falsch. Ich spreche da aus 
Erfahrung:). Das sieht dann etwa so aus:
1
void main() {
2
 while (1) {
3
    if (input(PIN_D1)==1){
4
        output_high(PIN_D0);
5
    }else
6
       output_low(PIN_D0);
7
    
8
 }
9
}
Gruß Jannis

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.