Beispiel Prog in C PIC 18F4550

OP #1976346
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
1
#include <p18f4550.h>    // Pic .h eigebunden
2
#include <delays.h>    // delays.h eingebunden
3

4
#pragma config FOSC = HS  //Oscilator Art zwischen 4MHz - 20MHz
5
#pragma config PWRT = ON  // AN
6
#pragma config BOR = OFF
7
#pragma config WDT = OFF  // Watch Dog AUS
8
#pragma config LVP = OFF
9
#pragma config PBADEN = OFF
10
#pragma config VREGEN = OFF
11
#pragma config MCLRE = ON  // Master Reset AN
12

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

15

16

17

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

20

21

22

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

28
  void blink (void)
29
  {
30
      a=0;
31
      Delay10KTCYx(50);
32
      a=255;
33
      Delay10KTCYx(50);
34
      a=0;
35
      Delay10KTCYx(50);
36
      a=255;
37
      Delay10KTCYx(50);
38
      a=0;
39
      Delay10KTCYx(50);
40
      a=255;
41
      Delay10KTCYx(50);
42
      a=0;
43
      Delay10KTCYx(100);
44
  }
45

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

54

55
    while (1)
56
    {  
57

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

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

69

70
      
71
    }
72
  }
#1976363
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.