我买了一块PIC18F46K22而我试图点亮一个LED,但它不起作用。相同的代码适用于PIC16F887。我阅读了数据表,但我看不出2个微控制器的端口有什么不同。我究竟做错了什么? 代码如下所示,提前谢谢!
int main(){
TRISB=0x00;
PORTB=0x00;
while(1){
PORTB=0XFF;
Delay_ms(1000);
PORTB=0X00;
Delay_ms(1000);
}
}
答案 0 :(得分:3)
您可能没有将PIC模拟引脚设置为数字模式。
在大多数(如果不是全部)具有模拟输入的PIC芯片上,具有模拟功能的引脚将始终以"模拟模式"启动。在将它们用作数字输出之前,您需要将它们设置为"数字模式"
请参阅数据表HERE并查看ANSELx寄存器。如果您的代码表示您的LED在端口B上,则需要将0写入相应的ANSELB位以将引脚设置为数字。
ANSELB = 0x00;
将所有端口B引脚设置为数字。
此外,写入输出引脚时,最好先写入锁存器而不是端口寄存器 LATB = 0xFF;
一般经验法则是LATx写入输出,PORTx读取输入。
答案 1 :(得分:0)
如评论中所述,请确保将配置位设置为与实际硬件匹配。请特别注意振荡器配置,因为代码在没有有源振荡器的情况下不会运行(如果有疑问,请使用内部振荡器)。
如果振荡器正在运行,请确保监控的引脚不与控制引脚的有源硬件外设共用(例如UART,PWM,...)。