2016-11-19 12 views
0

これは私のmain.cプログラムです。構造体/共用体が必要なため、ビルドに失敗しました。私は13f877aマイクロコントローラを使用しています。誰かがこのビルドの失敗の理由を教えてくれれば本当に嬉しいです。また、 "36.1関数が暗黙intを宣言しました"という警告がありました。それはどういう意味ですか?構造体/共用体によるmicroCビルドの失敗が必要です

#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

htc.h(またはその他のインクルードファイル)のポートbの定義は何ですか?それはunsigned charかPortBBits_tですか?それが符号なしのcharであるならば、そして/またはビットが必要です。 – cup

答えて

2

あなたがのMicroCを使用していると主張するが、あなたのビルド出力でコマンドラインが明確にあなたが実際に時代遅れとマイクロチップ社のXC8に置き換えているハイテクC 9.81を、使用している示しています。 HI-Tech Cでは、MicroCのように構造体メンバであるためSFRの単一ビットへのアクセスを許可しません。レジスタにはフル・バイトとしてしかアクセスできず、ビット操作を自分で実行する必要があります。たとえば、行:

PORTB.F0 = 1; 

になる必要があります:

それは必要な位置に1ビットをシフトC.に単一のビットを設定する一般的な方法ですし、OR、それをだ
PORTB |= (1 << 0); 

他のビットを変更せずに宛先バイトに挿入します。あなたがまだこれを理解していなければ、Cのビット操作のためのGoogle。

エラーは、delay_usと​​という関数が宣言されていないという事実に起因します。 HI-tech Cは、マクロの__delay_ms__delay_usを使用します。さらに、遅延マクロを使用する前に、PICの動作周波数(Hz)を_XTAL_FREQと定義する必要があります。

関連する問題