MCU是PIC16F1937
我写过下面一段代码
void main()
{
ANSELD=0x00;
TRISD=0x00;
PORTD=0x00;
while(1)
{
RD6=!RD6;
RD4=0;
delay(3000); //延时
RD4=1;
delay(3000); //延时
}
}
上面的程序运行时RD6一直输出高电平
当插入一条空指令,RD6正常输出方波如下。
void main()
{
ANSELD=0x00;
TRISD=0x00;
PORTD=0x00;
while(1)
{
RD6=!RD6;
asm("nop"); //加一条空指令
RD4=0;
delay(3000); //延时
RD4=1;
delay(3000); //延时
}
}
再看下面
void main()
{
ANSELD=0x00;
TRISD=0x00;
PORTD=0x00;
while(1)
{
LATD6=!LATD6;
RD4=0;
delay(3000); //延时
RD4=1;
delay(3000); //延时
}
}
把写操作的指令换成LAT锁存器也能正常输出方波
再看下面
void main()
{
ANSELD=0x00;
TRISD=0x00;
PORTD=0x00;
while(1)
{
RD6=!RD6;
delay(3000); //延时
delay(3000); //延时
}
}
去掉RD4的操作RD6也能正常输出方波
编译器是8.66版集成的PICC9.81PL0
是不是操作这类芯片IO口输出时都要写操作LAT而读的时候都要用PORT
还是编译器问题???????????????????????????
?????????????????????????????????
一周热门 更多>