我很难弄清楚为什么我一直出现这个错误。代码/项目的目的是获取模拟值并将其转换为代表温度传感器的数字值。此外,我有BCD开关,但一旦我显示代码,就会很清楚这可能是一些小错误或语法,但我找不到它。感谢您的帮助。
这是错误消息:
Error at file ../main.c line 100 column 45: (255) not a member of the struct/union ""
Error at file ../main.c line 100 column 48: (182) illegal conversion between types
int -> volatile union S380
Error at file ../main.c line 101 column 45: (255) not a member of the struct/union ""
Error at file ../main.c line 101 column 48: (182) illegal conversion between types
make: *** [main.p1] Error 1
int -> volatile union S380
这就是出现错误的地方。
void main(void){
InitPorts();
InitADC();
while(1){
int SetTemp = Bcd_SW_AB (Read_SwitchB(), Read_SwitchA());
DispTemp(Rd_ADC());
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
}
}
[Error at file ../main.c line 100 column 45: (255) not a member of the struct/union ""]
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
[ Error at file ../main.c line 101 column 45: (255) not a member of the struct/union ""]
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
这是完整的代码:
#include <xc.h>
#define RLED LATCbits.LATA0
#define GLED LATCbits.LATA1
//Defining pins on bcd switch A
#define a1 PORTBbits.RB0
#define a2 PORTBbits.RB1
#define a4 PORTBbits.RB2
#define a8 PORTBbits.RB3
//Defining pins on bcd switch B
#define b1 PORTBbits.RB4
#define b2 PORTBbits.RB5
#define b4 PORTBbits.RB6
#define b8 PORTBbits.RB7
void InitPorts(void){
ANSA0 = 1; // Set pin to analog
TRISA0 = 1; // Set pin to input
ANSELB = 0; // Set Port B to digital
TRISB = 1; // Set port B to input
ANSELC = 0 ; // Set Port C to digital
TRISC = 0; // Set Pins to output
ANSD0 = 0; //Set pin to digital
TRISD0 = 0; //Set pin to output
ANSD1 = 0; //Set pin to digital
TRISD1 = 0; //Set pin to output
}
void InitADC (void){
ADCON0bits.CHS = 0; //Channel 0
ADCON1bits.PVCFG = 0; //+Vref = Vdd
ADCON1bits.NVCFG = 0; //-Vref = Vss
ADCON2bits.ADFM = 1; //10-bit operation
ADCON2bits.ACQT = 0b0000010; //4 Tad
ADCON2bits.ADCS = 7; //Frc
ADCON0bits.ADON = 1; //Osc = on
}
int Rd_ADC(void){
int Result;
ADCON0bits.GODONE = 1;
while (ADCON0bits.GODONE);
Result =(((ADRESH <<6) | (ADRESL>>2))/2.56);
return Result;
}
void DispTemp( int BinVal){
int Bcd[2];
Bcd[0] = BinVal %10;
BinVal /= 10;
Bcd[1] = BinVal % 10;
BinVal /= 10;
LATC = Bcd[0];
LATCbits.LATC4 = 1;
LATCbits.LATC4 = 0;
LATC = Bcd[1];
LATCbits.LATC5 = 1;
LATCbits.LATC5 = 0;
}
int Read_SwitchA(void){
int total = 0;
if (a1) {total+=1;}
if (a2) {total+=2;}
if (a4) {total+=4;}
if (a8) {total+=8;}
return total;
}
int Read_SwitchB(void){
int total = 0;
if (b1) {total+=1;}
if (b2) {total+=2;}
if (b4) {total+=4;}
if (b8) {total+=8;}
return total*10;
}
int Bcd_SW_AB(int Read_SwitchB, int Read_SwitchA){
int total = Read_SwitchB + Read_SwitchA;
return total;
}
void main(void){
InitPorts();
InitADC();
while(1){
int SetTemp = Bcd_SW_AB (Read_SwitchB(), Read_SwitchA());
DispTemp(Rd_ADC());
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
}
}
参考这个宏定义。。。
#define RLED LATCbits.LATA0
,此错误。。。
文件中出现错误/main.c第100行第45列:(255(不是结构/联合"的成员">
。。。引用这行代码。。。
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
。。。似乎在说LATCbits
的类型是不具有任何名为LATA0
的成员的未标记结构或并集类型。
有可能的是;非法转换";错误只是从";不是会员";错误,因此它们不表示单独的问题。
谢谢大家,我发现了错误。感谢@ryyker让我知道我应该重新检查我的拼写,也感谢@jabberwocky把我的注意力放在LATCbits上,哪里可以打错字。
所以LATCbits是pic微控制器上的一个寄存器,我最初将LED定义为在LATC上,后来将其更改为在LATD上,从未更改过我的代码。
这是必须改变的部分:
形成这个(错误的(:
#define RLED LATCbits.LATA0
#define GLED LATCbits.LATA1
对此(正确(:
#define RLED LATDbits.LATD0
#define GLED LATDbits.LATD1
对于任何你想看到正确代码的人:
#include <xc.h>
#define RLED LATDbits.LATD0
#define GLED LATDbits.LATD1
//Defining pins on bcd switch A
#define a1 PORTBbits.RB0
#define a2 PORTBbits.RB1
#define a4 PORTBbits.RB2
#define a8 PORTBbits.RB3
//Defining pins on bcd switch B
#define b1 PORTBbits.RB4
#define b2 PORTBbits.RB5
#define b4 PORTBbits.RB6
#define b8 PORTBbits.RB7
void InitPorts(void){
ANSA0 = 1; // Set pin to analog
TRISA0 = 1; // Set pin to input
ANSELB = 0; // Set Port B to digital
TRISB = 1; // Set port B to input
ANSELC = 0 ; // Set Port C to digital
TRISC = 0; // Set Pins to output
ANSD0 = 0; //Set pin to digital
TRISD0 = 0; //Set pin to output
ANSD1 = 0; //Set pin to digital
TRISD1 = 0; //Set pin to output
}
void InitADC (void){
ADCON0bits.CHS = 0; //Channel 0
ADCON1bits.PVCFG = 0; //+Vref = Vdd
ADCON1bits.NVCFG = 0; //-Vref = Vss
ADCON2bits.ADFM = 1; //10-bit operation
ADCON2bits.ACQT = 0b0000010; //4 Tad
ADCON2bits.ADCS = 7; //Frc
ADCON0bits.ADON = 1; //Osc = on
}
int Rd_ADC(void){
int Result;
ADCON0bits.GODONE = 1;
while (ADCON0bits.GODONE);
Result =(((ADRESH <<6) | (ADRESL>>2))/2.56);
return Result;
}
void DispTemp( int BinVal){
int Bcd[2];
Bcd[0] = BinVal %10;
BinVal /= 10;
Bcd[1] = BinVal % 10;
BinVal /= 10;
LATC = Bcd[0];
LATCbits.LATC4 = 1;
LATCbits.LATC4 = 0;
LATC = Bcd[1];
LATCbits.LATC5 = 1;
LATCbits.LATC5 = 0;
}
int Read_SwitchA(void){
int total = 0;
if (a1) {total+=1;}
if (a2) {total+=2;}
if (a4) {total+=4;}
if (a8) {total+=8;}
return total;
}
int Read_SwitchB(void){
int total = 0;
if (b1) {total+=1;}
if (b2) {total+=2;}
if (b4) {total+=4;}
if (b8) {total+=8;}
return total*10;
}
int Bcd_SW_AB(int Read_SwitchB, int Read_SwitchA){
int total = Read_SwitchB + Read_SwitchA;
return total;
}
void main(void){
InitPorts();
InitADC();
while(1){
int SetTemp = Bcd_SW_AB (Read_SwitchB(), Read_SwitchA());
DispTemp(Rd_ADC());
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
}
}