PIC16F1937的IO口如何操作才能稳定

2020-02-09 09:18发布

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
还是编译器问题???????????????????????????
?????????????????????????????????
0条回答

一周热门 更多>