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

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.