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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren