2016-11-19 171 views
0

这是我的main.c程序,由于“结构/联合需要”而出现构建失败。我正在使用pic 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中的port b的定义是什么(或者需要其他包含文件)。它是一个无符号的字符或PortBBits_t?如果它是无符号字符,那么你需要和/或位。 – cup

回答

2

你们声称自己是使用的MicroC,但在你构建输出命令行清楚地表明你实际使用HI-TECH C 9.81,这是过时的,与Microchip的XC8取代。 HI-Tech C不允许访问SFR中的单个位,只要它们是结构成员,就像MicroC一样。您只能以全字节的形式访问寄存器,并且需要自己执行位操作。例如,该行:

PORTB.F0 = 1; 

那就需要成为:

PORTB |= (1 << 0); 

这是常见的方式来设置C.它变为1位到所需位置上的单位和OR而已到目标字节,而不是改变其他位。如果你还不明白这一点,可以在C中使用Google进行位操作。

function declared implicit int错误源于事实delay_us和​​没有声明。高科技C使用宏的__delay_ms__delay_us。另外,在使用延时宏之前,您需要定义_XTAL_FREQ与PIC的工作频率(以Hz为单位)。

相关问题