Nieuws:

Nu in MSM 251 REPORTAGE: Smalspoormodelbouwdagen 2024

Hoofdmenu

C-experten gezocht!

Gestart door conducteur, 10 juni 2013, 19:56:58 PM

conducteur




/***************************************************************************
*    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;
           
}}

Kan iemand verklaren waarom dit simpele programma om mijn programmer en demobordje te testen problemen geeft in de compiler?





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! **********
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

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:
_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'


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.
Met vakantie voor onbepaalde duur.

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\"


void main(void)
{
}


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


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


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

Groetjes, Peter


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
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

#5

/**************************************************************************
*    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 <htc.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS);




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





Dit geeft nog altijd problemen in de config code lijn... Ik begrijp niet dat zoiets kinderlijk eenvoudig verkeerd kan lopen?
Juiste PIC is ingesteld in MPlab? 16f887?



Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

eve

Voor de tweede keer :

The syntax for a for loop is

for ( variable initialization; condition; variable update ) {
  Code to execute while the condition is true
}


Die 5 € transportkosten voor een komplete doos C-boeken-materiaal die ik u voorstelde, waren precies toch geen slecht voorstel...

Erik

conducteur

#7
/* **************************************************************************
*    HITECH C for PIC program A_01- 08/11/2010                   *
•   Author:        Vermeulen D      *
****************************************************************************
*      Processor:     PIC16F877(A)                                                *
*      Compiler:      HI-TECH C PRO v9.65PL1 Lite                     *
•   Files required:     none         *
•   Discription: light up led0 of port C      *
•   PIN Assignments:    led at C0                                               *
************************************************************************* */
#include <htc.h>
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled
__CONFIG(HS & WDTDIS & LVPDIS);


void main()
{
    TRISC = 0x00;       // configure POORT C als output
    PORTC = 0b00000001;          // Pin C0 hoog


    for (; {                 // loop forever
       
    }
}



Dit komt uit de cursus elektronica en is het allereerste voorbeeldprogramma dat we gezien hebben. Op school hebben we dat getest en daar heeft dat gewerkt zonder problemen. Hier heb ik me op gebaseerd voor mijn programmertest.
(over welke boeken heb je het? Mail me!)
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

#8
void main()
{
    TRISC = 0b00000000;
     PORTC = 0b00000001;

     for ( ; ; ) {
                 ;
      }
}

het bovenstaande zal zo moeten werken, hoe dat zit met die CONFIG ERROR 800 zie ik niet direct ?

Deze omschrijving staat er in de HI-TECH C manual:

800) undefined symbol "*"  The named symbol is not defined in this module, and has not been specified GLOBAL.


Mogelijk kan de compiler 16f887.h  of  htc.h niet vinden?

Mogelijk moet de juiste map geselecteerd worden waar deze staan?


EDIT: net gezien dat Peter(C) het main program ook al had voorgesteld  8)

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

zolang deze lijn in de code staat krijg ik hem niet door de compiler, compiler herinstalleren?

// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;
__CONFIG(HS & WDTDIS & LVPDIS);
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

Geert

her installeren zal ik niet doen, gewoon verder zoeken, het zal wel iets stom zijn zoals gewoonlijk  ;)

Geert
Schaal H0 - digitaal zelfbouw - Favoriete Lok: V200 DB

conducteur

Dat is net het vreemde,
// Config: HS ext Xtal- Watchdogtimer disabled - LVP Disabled;__CONFIG(HS & WDTDIS & LVPDIS);

heb ik uit de voorbeeldprogramma's van de cursus gekopieerd, waarvan ik weet dat ze hebben gewerkt op school. Koppige microcontrollers/programmeertaal. :(
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

eve

In vele voorbeeldprogramma's zitten fouten, bewust of onbewust, zelfs drukfouten buiten de wil van de auteur om.

Een for-opdracht is  for ( ; ; )

Het laatste  ) -haakje zie ik niet staan in uw voorbeeld.

Erik

Boeken : zoek ik terug op.

conducteur

puntkomma haakje vormt ;) en die smiley wordt in code niet weergegeven. Daarom mankeert ie hier op het forum, maar in de code staat het juist. En ik denk niet dat dat het probleem is, daarvoor krijg ik geen errors of warnings.


De voorbeeldprogramma's komen uit de cursus elektronica van op school en hebben we effectief getest en daar zaten geen fouten in.
Rian 2-Rail DCC NMBS TPIII
Grote Modeltreinruilbeurs Blankenberge Pasen 2016
Zaal Forum

eve