2016-11-19 2 views
0

Ceci est mon programme main.c et il y a eu un échec de construction dû à "struct/union required". J'utilise le microcontrôleur pic 13f877a. Je serai vraiment reconnaissant si quelqu'un peut me dire la raison de cet échec de construction. aussi il y avait un autre avertissement disant "36.1 fonction déclarée implicite int". qu'est-ce que cela signifie aussi?échec de construction microC dû à struct/union requis

#include<htc.h> 
    #define _XTAL_FREQ 4000000 
    __CONFIG(0X3F39); 

    void main(){ 
     int a; 
     TRISB = 0b00010000;   //RB4 as Input PIN (ECHO) 
     TRISC = 0b00000000;   //C as Output PINs (LED) 
     T1CON = 0b00010000;   //Initialize Timer Module 

     while(1){ 
     TMR1H = 0;     //Sets the Initial Value of Timer 
     TMR1L = 0;     //Sets the Initial Value of Timer 
     PORTC = 0b00000000; 
     PORTB.F0 = 1;    //TRIGGER HIGH 
     Delay_us(10);    //10uS Delay 
     PORTB.F0 = 0;    //TRIGGER LOW 

     while(!PORTB.F4){   
      T1CON.F0 = 1; 
     }    
     while(PORTB.F4){    
      T1CON.F0 = 0;    
     } 

     a = (TMR1L | (TMR1H<<8)); //Reads Timer Value 
     a = a/58;     //Converts Time to Distance 
     a = a + 1;     //Distance Calibration 
     if(a>=2 && a<=400){ 
      //with in the range 
      PORTC = 0b11111111; 
     } else { 
      //out of range 
      PORTC = 0b00000000; 
     } 
     Delay_ms(400); 
     } 
    } 

Build C:\Users\user\Desktop\SmartDustbin for device 16F877A 
Using driver C:\Program Files (x86)\HI-TECH Software\PICC\9.81\bin\picc.exe 

Make: The target "C:\Users\user\Desktop\main.p1" is out of date. 
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.81\bin\picc.exe" --pass1 C:\Users\user\Desktop\main.c -q --chip=16F877A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" 
Error [196] C:\Users\user\Desktop\main.c; 15.10 struct/union required 
Warning [361] C:\Users\user\Desktop\main.c; 16.1 function declared implicit int 
Error [196] C:\Users\user\Desktop\main.c; 17.10 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 19.16 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 20.10 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 22.15 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 23.10 struct/union required 
Warning [361] C:\Users\user\Desktop\main.c; 36.1 function declared implicit int 

********** Build failed! ********** 
+1

Quelle est la définition du port b dans htc.h (ou un autre fichier d'inclusion qu'il prend). Est-ce un char non signé ou PortBBits_t? Si c'est char non signé, alors vous devez et/ou les bits. – cup

Répondre

2

Vous prétendre utiliser MicroC, mais la ligne de commande dans la sortie de la construction montre que vous êtes clairement à l'aide réellement HI-Tech C 9,81, qui est obsolète et remplacé par le XC8 de Microchip. HI-Tech C n'autorise pas l'accès à des bits uniques dans SFR, car ils étaient membres de la structure, comme le fait MicroC. Vous ne pouvez accéder aux registres que sous la forme d'un octet complet et vous devez effectuer la manipulation des bits vous-même. Par exemple, la ligne:

PORTB.F0 = 1; 

aurait besoin de devenir:

PORTB |= (1 << 0); 

Quelle est la façon courante de définir un seul bit en C. Il déplace un bit 1 à la position requise et OR est elle dans l'octet de destination, ne pas modifier d'autres bits. Google pour la manipulation de bits en C si vous ne comprenez pas encore cela. Les erreurs function declared implicit int proviennent du fait que les fonctions delay_us et delay_ms ne sont pas déclarées. HI-tech C utilise les __delay_ms et __delay_us de la macro. De plus, vous devrez définir _XTAL_FREQ avec la fréquence de fonctionnement de votre PIC en Hz avant d'utiliser les macro de retard.