PIC18F46K22,LED闪烁不起作用

时间:2018-02-22 13:11:08

标签: microcontroller pic

我买了一块PIC18F46K22而我试图点亮一个LED,但它不起作用。相同的代码适用于PIC16F887。我阅读了数据表,但我看不出2个微控制器的端口有什么不同。我究竟做错了什么? 代码如下所示,提前谢谢!

int main(){
TRISB=0x00;
PORTB=0x00;
  while(1){
    PORTB=0XFF;
    Delay_ms(1000);
    PORTB=0X00;
    Delay_ms(1000);
  }
}

2 个答案:

答案 0 :(得分:3)

您可能没有将PIC模拟引脚设置为数字模式。

在大多数(如果不是全部)具有模拟输入的PIC芯片上,具有模拟功能的引脚将始终以"模拟模式"启动。在将它们用作数字输出之前,您需要将它们设置为"数字模式"

请参阅数据表HERE并查看ANSELx寄存器。如果您的代码表示您的LED在端口B上,则需要将0写入相应的ANSELB位以将引脚设置为数字。
ANSELB = 0x00; 将所有端口B引脚设置为数字。

此外,写入输出引脚时,最好先写入锁存器而不是端口寄存器 LATB = 0xFF;

一般经验法则是LATx写入输出,PORTx读取输入。

答案 1 :(得分:0)

如评论中所述,请确保将配置位设置为与实际硬件匹配。请特别注意振荡器配置,因为代码在没有有源振荡器的情况下不会运行(如果有疑问,请使用内部振荡器)。

如果振荡器正在运行,请确保监控的引脚不与控制引脚的有源硬件外设共用(例如UART,PWM,...)。