Probleme beim Compilieren von .c zu .hex

Gast #701679
Lesenswert?

Hallo, ich habe mein erstes PIC-Programm (Steuerung einer Binäruhr) 
geschrieben, habe aber Probleme es zum HEX-File zu Compilieren.

Geschrieben habe ich das Programm in C (hätte man wahrscheinlich viel 
kompakter schreiben können, aber ist wie gesagt mein erstes 
PIC-Programm).

Beim Compilieren mit CC5X (student version) in MPLAB erhalte ich immer 
folgende Fehlermeldung:

Error[1] C:\Programme\CC5X\16F872.H 3 : Duplicate chip definition
 (Multiple chip definitions detected (option -p<chip> and #include 
<header.h>).The #include statement should be removed)

Wenn ich den Header "#include <16F872.H>" weglasse, dann kommen 
massenweise Fehler, dass die Eingänge und Ausgänge nicht definiert 
seien.
Hab keine Ahnung ob irgendwas an meinem geschriebenen Programm falsch 
ist oder ob ich mit dem Compiler irgendwas falsch mache.


Für Tipps wäre ich sehr Dankbar!

Oli
Angehängte Dateien:
Gast #701683
Lesenswert?

> (Multiple chip definitions detected (option -p<chip> and #include
><header.h>).The #include statement should be removed)

Dann steht bei "option -p<chip>" in MPLAB ein anderer Prozessor
als 16F872 drin.
Gast #701723
Lesenswert?

Nur mal so nebenbei, der Code wurde nicht für CC5x
geschrieben.

TRISA0 = 1; //unbekannt

TRISA.0 = 1; // ist besser

  while(true) //unbekannt

  while(1) // ist besser

 RB2 = 0; //unbekannt
 PORTB.2 = 0; // ist besser

Das zieht sich komplett durch den Code.
Gast #701752
Lesenswert?

Oh achso, ich wusste nicht dass verschiedene Compiler auch verschiedenen 
Code benutzen. Habe mir verschiedene fertige Programme angeschaut und 
mir daraus den Code zur Ansteuerung der Ein- und Ausgänge 
zusammengereimt.
Dann versuche ich mal, das Programm entsprechend zu ändern.

Wo finde ich denn in MPLAB die "option -p<chip>"? Habe am Anfang bei 
'Project Wizard' den Pictyp eingestellt.
Angehängte Dateien:
Gast #701863
Lesenswert?

So, habe das Programm jetzt nach den Vorschlägen von holger 
umgeschrieben, jetzt scheint das Compilieren (prinzipiell) zu 
funktionieren. Allerdings kommt nun folgende Meldung:

Error[1] C:\Dokumente und Einstellungen\Oliver Pohl\Desktop\main.c 937 : 
Code size exceeded (FREE compiler limitation)

So groß ist das Programm doch eigentlich nicht, dass es über die Grenze 
der Demoversion hinausgeht, oder? Kann man das irgendwie umgehen oder 
evtl. etwas Code einsparen?
Gast #701936
Lesenswert?

lass den Müll weg :

    if(sekunde == 0)
     .
     .



und schreib es so :
PORTB = (sekunde & 0x3f); /* 0x3f = 0b111111 */
und entspreched für Minute und Stunde

Wie hast du die Pins nummeriert ?
RB0 --> RB7 oder
RB1 --> RB8 ; in diesem Fall :PORTB = ((sekunde & 0x3f)<1); /* 0x3f = 
0b111111 */
Gast #702238
Lesenswert?

RA1 bis RA5 für Stunden, RB1 bis RB6 für Minuten und RC1 bis RC6 für 
Sekunden (Sind jeweils nur 6 LEDs, soll eine echte Binäruhr werden, 
nicht mit BCD's für jede Ziffer).
Wäre das dann für die Minuten entsprechend PORTC = ((minute & 0x3f)<1); 
und für die Stunden PORTC = ((stunde & 0x3f)<1); ?
Und diese 3 Zeilen bewirken genau das, was meine 500 Zeilen machen??
Gast #702552
Lesenswert?

>und für die Stunden PORTC = ((stunde & 0x3f)<1); ?
>Und diese 3 Zeilen bewirken genau das, was meine 500 Zeilen machen??

Nein, weil sie falsch sind :(

PORTB &= 0x81; // PB1-PB6 auf 0 setzen, PB0 und PB7 beibehalten
PORTB |= (sekunde << 1); // PB1-PB6 auf Sekundenwert setzen

Damit spartst du dir alle "if(sekunde == wert)".

Das machst du dann ähnlich für PORTC und PORTA.
Gast #703584
Lesenswert?

Wunderbar, jetzt hat das Compilieren funktioniert, danke!
Die Uhr läuft auch soweit, allerdings vieeeel zu schnell. Die Sekunden 
verticken so schnell, dass man die ersten LED-Stellen garnicht mehr 
blinken sieht.
Was könnte ich denn falsch gemacht haben? Für den Takt habe ich einen 
Quarz mit 4,194304 Mhz benutzt.
Angehängte Dateien:

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