Forum: Compiler & IDEs c compiler Unterprogramme aufrufen mit Funktion


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Zeidler (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
Bin dabei mir den C Compiler selbst beizubringen. Die ersten Programme 
waren auch erfolgreich. Jetzt wollte ich das Blinky Programm so 
verändern das die Zeitschleife mit einem Unterprogramm in der for 
schleife realisiert wird. Der Compiler von MikroElektronica sagt keine 
Fehler aber die Diode leuchtet ständig. Programiert wird der PIC 16F630. 
Was ist da faul.  Nachstehend noch das Programm.

//** D E F I N E S *********************************************
#define LED        PORTC.RC0        //LED liegt an Port C RC0

//**Prototype***************************************************
void pausen ( int ms );



void main()
{                       // Hauptprpgramm
  TRISC = 0;            // set PORTC to be digital output

  PORTC = 0;            // TURN off LEDs on PORTC



                while(1) {             //Hauptschleife
                LED = 1;               //LED einschalten
                pausen (1000) ;           //ca. 1 Sekunde (1000 ms) 
warten
                LED = 0;               //LED ausschalten
                pausen (1000) ;           //ca. 1 Sekunde (1000 ms) 
warten
        }
}

void pausen(int ms)
{
       int i=0;
       for( i=0; i<ms; i++ ) {
         delay_ms(1000);
       }
}

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Nach 1000 Sekunden (16,7min) geht sie aus.

: Bearbeitet durch User
von Zeidler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Warum erst in 16,7Minuten und wann geht sie Wieder an ?

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Zeidler schrieb:
> Warum erst in 16,7Minuten

Weil du das so programmiert hast. Du wartest in einer Schleife 1000 mal 
für je eine Sekunde.

> und wann geht sie Wieder an ?

Nach weiteren 16,7 Minuten.

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Zeidler schrieb:
> Warum erst in 16,7Minuten und wann geht sie Wieder an ?

Rechne nal selber:
1000x 1000ms = ?

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Nach weiteren 16,7 Minuten.
Anders ausgedrückt: 16min 40s

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Rolf M. schrieb:
>> Nach weiteren 16,7 Minuten.
> Anders ausgedrückt: 16min 40s

Falls er den Mega8 mit eine Präzisionsquarz betreibt.

@Zeidler: manchmal macht man Copy&Paste-Fehler, die vom Autor nicht 
gefunden werden wollen. Dann hilft ein externer Kick in die richtige 
Richtung ;-)

von Kolja (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Carl D. schrieb:
>>> Nach weiteren 16,7 Minuten.
>> Anders ausgedrückt: 16min 40s
>
> Falls er den Mega8 mit eine Präzisionsquarz betreibt.

Das ist völlig unabhängig vom Quarz. 16,7min ist nur eine andere 
Schreibweise.
16min 40s sind exakt 16,7min. Denn 40s sind 0,7min :-)

von Zeidler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alles klar. Habe die schleifen drastisch verkleinert. Funktioniert 
jetzt.
Unter strich aber kann ich sagen >>> Im prinzip richtig zeit 
falscheingestellt.

Danke an alle für die Hinweise.

Gruß
Karl-Heinz

von Jemand (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kolja schrieb:
> Carl D. schrieb:
>>>> Nach weiteren 16,7 Minuten.
>>> Anders ausgedrückt: 16min 40s
>>
>> Falls er den Mega8 mit eine Präzisionsquarz betreibt.
>
> Das ist völlig unabhängig vom Quarz. 16,7min ist nur eine andere
> Schreibweise.
> 16min 40s sind exakt 16,7min. Denn 40s sind 0,7min :-)

Seit wann ist 2/3 = 0.7?

von Kolja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jemand schrieb:
> Kolja schrieb:
>> Carl D. schrieb:
>>>>> Nach weiteren 16,7 Minuten.
>>>> Anders ausgedrückt: 16min 40s
>>>
>>> Falls er den Mega8 mit eine Präzisionsquarz betreibt.
>>
>> Das ist völlig unabhängig vom Quarz. 16,7min ist nur eine andere
>> Schreibweise.
>> 16min 40s sind exakt 16,7min. Denn 40s sind 0,7min :-)
>
> Seit wann ist 2/3 = 0.7?

Ja, hast völlig recht. Das sind 0,66666.

Aber die 16,7 kommen nicht von mir. Was aber garantiert richtig ist, daß 
1000s genau 16min 40s sind.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.