成员引用基类型 'volatile unsigned char' 不是结构或联合
member reference base type 'volatile unsigned char' is not a structure or union
我正在尝试对 PIC 16f877A 微控制器进行编程以将伺服电机旋转 0 到 180 度,但每次我尝试构建程序时都会收到错误消息“成员参考基类型 'volatile unsigned char' 是不是结构或联合。我正在使用带有 xc8 编译器的 MPLAB。我找不到问题。
#include<xc.h>
void Rotation0()
{
int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
__delay_us(800);
PORTB.F0 = 0;
__delay_us(19200);
}
}
void Rotation90()
{
int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
__delay_us(1500);
PORTB.F0 = 0;
__delay_us(18500);
}
}
void Rotation180()
{
int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
__delay_us(2200);
PORTB.F0 = 0x00;
__delay_us(17800);
}
}
void main()
{
TRISB = 0;
PORTB = 0x00;
do
{
Rotation0();
__delay_ms(2000);
Rotation90();
__delay_ms(2000);
Rotation180();
}while(1);
}
正如@user3386109 在评论中指出的那样,PORTB
不是结构。
您可以使用 PORTBbits.RB0 = 1;
或仅使用 RB0 = 1;
,因为它也已定义。我更喜欢第一个,因为它更冗长。
所有具有特殊命名位的寄存器都使用相同的命名约定。寄存器和位名称与数据表中的匹配。有时在多个寄存器中可能使用相同的位名称。在这种情况下,您需要 verbose 方法。
PORTB
指的是8位寄存器本身,可用于直接8位赋值,如PORTB = 0x00;
我正在尝试对 PIC 16f877A 微控制器进行编程以将伺服电机旋转 0 到 180 度,但每次我尝试构建程序时都会收到错误消息“成员参考基类型 'volatile unsigned char' 是不是结构或联合。我正在使用带有 xc8 编译器的 MPLAB。我找不到问题。
#include<xc.h>
void Rotation0()
{
int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
__delay_us(800);
PORTB.F0 = 0;
__delay_us(19200);
}
}
void Rotation90()
{
int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
__delay_us(1500);
PORTB.F0 = 0;
__delay_us(18500);
}
}
void Rotation180()
{
int i;
for(i=0;i<50;i++)
{
PORTB.F0 = 1;
__delay_us(2200);
PORTB.F0 = 0x00;
__delay_us(17800);
}
}
void main()
{
TRISB = 0;
PORTB = 0x00;
do
{
Rotation0();
__delay_ms(2000);
Rotation90();
__delay_ms(2000);
Rotation180();
}while(1);
}
正如@user3386109 在评论中指出的那样,PORTB
不是结构。
您可以使用 PORTBbits.RB0 = 1;
或仅使用 RB0 = 1;
,因为它也已定义。我更喜欢第一个,因为它更冗长。
所有具有特殊命名位的寄存器都使用相同的命名约定。寄存器和位名称与数据表中的匹配。有时在多个寄存器中可能使用相同的位名称。在这种情况下,您需要 verbose 方法。
PORTB
指的是8位寄存器本身,可用于直接8位赋值,如PORTB = 0x00;