【问题标题】:PIC18F46K22, led blink not workingPIC18F46K22,led 闪烁不工作
【发布时间】:2018-02-22 13:11:07
【问题描述】:

我买了一个 PIC18F46K22,我想点亮一个 LED,但它不起作用。相同的代码适用于 PIC16F887。我阅读了数据表,但我看不出 2 个微控制器的端口之间有任何区别。我究竟做错了什么? 代码如下,先谢谢了!

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

【问题讨论】:

  • 您是否将配置保险丝(特别是与振荡器选择相关的位)设置为与您的硬件匹配的内容?
  • 我是 PIC 的新手,你能解释一下你在说什么吗?谢谢!

标签: microcontroller pic


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 一般情况下,设置为模拟输入的引脚仍然可以输出数字,但不能输入数字。但是为 LATx +1,刚开始时它已经咬了很多新人,包括我自己。
【解决方案2】:

如评论中所述,请确保设置配置位以匹配您的实际硬件。请特别注意振荡器配置,因为如果没有有效的振荡器,代码将无法运行(如果有疑问,请使用内部振荡器)。

如果您的振荡器正在运行,请确保您监控的引脚未与控制该引脚的活动硬件外设(例如 UART、PWM 等)共享。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多