www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Beispiel Prog in C PIC 18F4550


Autor: Patrick E. (f4550tim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe hier einen 8-Bit binärzähler. Ich möchte, sobald der 
Port auf 255 steht. Also alle Pins von D auf high stehen, die Funktion 
zum blinken aufrufen. Doch leider wenn ich das ausgeklammerte (die If 
abfrage) einklammere (also nicht auskommentiere), dann dauert es eine 
kurze zeit. Ich bekomme die erste LED an PORT D also PIN 1 auf high, und 
dann geht garnichts mehr. Wo liegt mein Denkfehler?

Wenn er auf 255 hochgezählt hat, wird er automatisch mit dem nächsten 
zähler auf 0 gesetzt. Das klappt auch soweit wennn ich die Ifabfrage 
drausen lasse.

lg Tim

PS: Hier mein Code

#include <p18f4550.h>    // Pic .h eigebunden
#include <delays.h>    // delays.h eingebunden

#pragma config FOSC = HS  //Oscilator Art zwischen 4MHz - 20MHz
#pragma config PWRT = ON  // AN
#pragma config BOR = OFF
#pragma config WDT = OFF  // Watch Dog AUS
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#pragma config VREGEN = OFF
#pragma config MCLRE = ON  // Master Reset AN

#pragma code     //Code soll in den Programmspeicher geschrieben werden




unsigned char a=0;   // Variable a wird deklariert und auf 0 gestezt




  void set (void)  // Das ist die Funktion, die die neuen Bits an PORT D setzt
  {
    LATD=a;  //Variable a wir auf den Port geschrieben
  }

  void blink (void)
  {
      a=0;
      Delay10KTCYx(50);
      a=255;
      Delay10KTCYx(50);
      a=0;
      Delay10KTCYx(50);
      a=255;
      Delay10KTCYx(50);
      a=0;
      Delay10KTCYx(50);
      a=255;
      Delay10KTCYx(50);
      a=0;
      Delay10KTCYx(100);
  }

  void main(void)   // Haupt Routine
  {
      TRISD = 0;      // Port D ist nun ein Ausgang
      TRISA = 0xFF;    // Port A ist ein Eigang
      ADCON1 = 0x0F;    // Alle Port Pins auf digital gesetzt
      CMCON = 0x07;     // Komparatoreinänge deaktivieren
    LATD = 0x00;  // Der PORT D ist von Anfang an auf 0 gesetzt


    while (1)
    {  

/*-----------------------------------------------------------------------------------------------
      if (a=0xFF)  //Wenn der zähler bei 255 angekommen ist, dann wird blink aufgerufen.
      {
      blink();
      }
-----------------------------------------------------------------------------------------------*/

      a++;    // a wird hochgezählt
      set();    // Die Funktion Set wird aufgerufen
      Delay10KTCYx(100);  // ein wenig Pause


      
    }
  }

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim E. schrieb:
> if (a=0xFF)  //Wenn der zähler bei 255 angekommen ist, dann wird blink 
aufgerufen.

= ist eine Zuweisung
== ist ein Vergleich

Um solche Fehler zu vermeiden, schreibe die Variable die du verlgeichen 
willst (also a) auf die rechte  Seite. So etwa:
if ( 0xFF == a )

Wenn du jetzt nur ein = machst, gibt der Compiler ne Fehlermeldung aus, 
dass das so keinen Sinn macht

Autor: Patrick E. (f4550tim)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir. Nun ist alle sin bester Ordnung. Ich habe auch noch oben bei 
der funktion blink nach jedem setzten des wertes einmal die Funktion set 
aufgerufen, damit man das blinken auch sieht.

DANKE für deien tollen TIPP mit dem a nach rechts.

lg Tim

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.