Modelspoor, praktijk > Modelspoor-elektronica met microcontrollers

C-experten gezocht!

(1/5) > >>

conducteur:

--- Code: ---

/***************************************************************************
*    HITECH C for PIC Program A_02- 08/11/2010                                                          *
*      Processor:     PIC16F887                                                                                    *
*      Compiler:      HI-TECH C PRO v9.65PL1 Lite                     *
•   Discription:  led aan poort C   *
•   PIN Assignments:   led aan C                                            *
**************************************************************************/




#include <16f887.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS)
#IRCF=0X07.


void main()
{
       
     
   
   for (;
   {TRISC=0x00;
      PORTC=0x37;
           
}}
--- Einde van code ---
Kan iemand verklaren waarom dit simpele programma om mijn programmer en demobordje te testen problemen geeft in de compiler?



--- Code: ---

Build E:\Users\Eigenaar\Desktop\mplab testen\knipperlicht for device 16F887
Using driver C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe


Make: The target "E:\Users\Eigenaar\Desktop\mplab testen\pag_1_17.p1" is up to date.
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.83\bin\picc.exe" -oknipperlicht.cof -mknipperlicht.map --summary=default,-psect,-class,+mem,-hex --output=default,-inhx032 pag_1_17.p1 --chip=16F887 -P --runtime=default,+clear,+init,-keep,+osccal,-download,-resetbits,-stackcall,+clib --opt=default,+asm,-debug,-speed,+space,9 --warn=0 -D__DEBUG=1 --double=24 --float=24 --addrqual=ignore -g --asmlist "--errformat=Error   [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode)  V9.83
Copyright (C) 2011 Microchip Technology Inc.
Licensed for evaluation purposes only.
This licence will expire on Mon, 22 Jul 2013.
Error   [800] C:\Users\....\pag_1_17.c; 13. undefined symbol "LVPDIS"
Error   [800] C:\Users\.....\pag_1_17.c; 13. undefined symbol "WDTDIS"
Error   [800] C:\Users\......\pag_1_17.c; 13. undefined symbol "HS"


********** Build failed! **********
--- Einde van code ---

eve:
Er mankeert een haakje    )    zo ver ik kan zien...

Erik

Havoc:
Geen expert en zeker niet in hitec en microcontrollers.

Alles wat begint met /* en loopt tot */ is commentaar. Dus de hele eerste blok is niks voor de compiler.

Dan is er #include <16f887.h> Dat wil zeggen steek de file 16f887.h volledig in deze file en op deze plaats. Omdat je <> gebruikt hebt gaat de compiler die file zoeken in je path dat je opgegeven hebt met de /I compiler optie. Als die er niet is wat je voor je OS als INCLUDE path hebt opgegeven. Bekijk die file eens

Een .h file is een header file en bevat normaal gezien enkel variabele definities (welk type is het) en functie prototypes (welke argumenten neemt een functie en welk type geeft ze terug). Soms met wat commentaar erbij.

De lijn met // wil zeggen dat het commentaar is tot het einde van de lijn.

Komen we aan __CONFIG(HS & WDTDIS & LVPDIS) Dit is geen C, maar een instructie voor de PIC assembler. Hoe je dat moet gebruiken daar heeft Microchip wel documenten over. http://www.google.com/url?sa=t&rct=j&q=__CONFIG&source=web&cd=2&ved=0CDIQFjAB&url=http%3A%2F%2Fww1.microchip.com%2Fdownloads%2Fen%2FDeviceDoc%2FPIC%2520Config%2520bit%2520Format_Syntax_AndDefinitions.pdf&ei=axe2UbW0LO-Z0QXin4CQBg&usg=AFQjCNGDWK-bpE7450aw3oiTWP-kOT7bpw

Dan komen we aan je "void main()". Dat is het entrypunt van je programma.

Dan heb je iets dat niet klopt: for(;{TRISC=0x00;PORTC=0x37;} (de laaste } is het einde van je "main" functie) Een for statement is van de vorm

for(startvoorwaarde;doe bij iedere iteratie;eindvoorwaarde)

En dat heb je niet! Je hebt geen beginvoorwaarde, dat is geen probleem. Dan doe je {TRISC=0x00;PORTC=0x37;} Op zich ook geen probleem. Maar er is geen eindvoorwaarde. Die moet er niet zijn (je hebt dan een oneindige lus) maar dan moet je een "lege" instructie hebben en je for statement moet afsluiten met ")". En daarna moet een ; komen.

De error die de compiler geeft is gewoon dat hij symbolen tegenkomt die nog niet gedefinieert zijn. Je moet eerst de compiler uitleggen wat voor type LVPDIS, WDTDIS en HS zijn en welke waarde ze hebben.

Je gaat dan bvb zoiets moeten doen:

--- Code: ---_CP_ON     EQU   H'000F'
_CP_OFF    EQU   H'3FFF'
_PWRTE_ON  EQU   H'3FF7'
_PWRTE_OFF EQU   H'3FFF'
_WDT_ON    EQU   H'3FFF'
_WDT_OFF   EQU   H'3FFB'
_LP_OSC    EQU   H'3FFC'
_Xt_OSC    EQU   H'3FFD'
_HS_OSC    EQU   H'3FFE'
_RC_OSC    EQU   H'3FFF'
--- Einde van code ---

Gepikt op http://www.sq-1.com/config.html Maar dan aangepast aan jouw controller uiteraard. Vandaar ook de '&' operator. Je beschrijft welke bits voor elke functie welke waarde moeten krijgen en dan stel je de eindwaarde samen door een logische and. Lees die link eens, daar staat ook dat je een "list" directive moet hebben en welke file je moet includen omdat jouw compiler er iets van zou snappen.

PeterC:
Even op mijn PC gekeken en wat blijkt: bij de installatie van MPLab IDE heb ik de volledige installatie uitgevoerd en HI-TECH C staat er ook op!

Een vlugge blik:
#include <16f887.h> moet #include <pic16f877.h> worden (zie: "C:\Program Files\HI-TECH Software\PICC\9.83\include\"


--- Code: ---void main(void)
{
}

--- Einde van code ---

is je hoofdprogramma.  Voer je initialisaties uit voor je forever loop en schrijf je accolades mooi onder elkaar:


--- Code: ---void main(void)
{
  TRISC=0x00;
  PORTC=0x37;
  for (;;)
  {
  }
}

--- Einde van code ---

Je lus doet niets en dus je programma ook niet.  Probeer dit al door de compiler te krijgen voor je verder gaat.

Geert:
Heb je in MPLAB de juiste PIC ingesteld?

als je dat gedaan hebt, dan kan je #include <16F887.h> vervangen door #include <htc.h>

zet ook eens een puntcomma achter de __CONFIG lijn

de rest is al aangehaald door andere posters...

Geert

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie