【问题标题】:Cannot read input from pins PIC无法从引脚 PIC 读取输入
【发布时间】:2020-08-29 14:27:53
【问题描述】:

我在输入阅读方面遇到了一个非常棘手的问题。

我只是想使用一个按钮来激活几个 LED,但我不知道为什么当我按下按钮时特定的 PORT 不会变为 0 到 1。

我发现它可能与模拟有关,但我将其转换为数字

  • PIC16F18875
  • 使用 Mplabx v5.40

这里是代码

#define _XTAL_FREQ 4000000
#define button TRISDbits.RD7
#include <xc.h>
ledLoop(void){
    char run = 1;
    while(1){
        if(PORTDbits.RD7==1){
           LATB=run;
           run *= 2;
           __delay_ms(200);
           
        }
        else{
            LATB=0;
        }
    }
}
void main(void)
{
    ANSELDbits.ANSD7=0;
    TRISDbits.TRISD7=1;
    TRISA=0;
    LATA=0x00;
    ledLoop();
    
}
 

我的按钮也按如下方式连接:

3V -> LED -> 10 欧姆电阻 -> 按钮 -> 到质量和 RD7 端口

编辑


如果 RD==0 的 if 条件,则 4 个 LED 工作,因此它工作。对于按钮部分,如果我按下按钮 LED 工作,但不要将 PORTDbits.RD7 更改为 1

【问题讨论】:

  • 该示意图听起来好像没有为引脚提供正确的驱动,但还不清楚。请使用适当的示意图进行编辑。
  • 我刚刚编辑了帖子,感谢您的帮助
  • 我不太清楚,因为这是一张面包板的照片而不是原理图,但看起来你的按钮 GPIO 可能只是接地。按下和释放按钮时,使用万用表或示波器检查输入引脚上的电压。
  • LATB=0; 更改为 LATB=~LATB; __delay_ms(500); 看看是否会出现这种情况。

标签: c pic mplab


【解决方案1】:

您需要将按钮的“高”侧连接到 RD7,将按钮的“低”侧连接到地:

这样,如果按钮打开,3,3V 的高电平就会到达输入引脚。当您按下按钮时,低电平接地到达输入引脚。

(正确的说法听起来会有所不同,但我想尽可能简单地说。)

【讨论】:

  • 看来你是对的。我认为我必须将我的按钮连接到 3V,然后当我按下按钮时,引脚 RD7 会改变他的值。但是当我的手指非常靠近按钮时有些奇怪,led 例程工作
  • 当然,由于输入是“打开的”,因此只需很少的电流就可以使其电平摆动。你的手指会收集到足够的电磁噪声来建立一些电压来影响那个引脚。 -- 使用建议的解决方案,对 3.3V 的阻抗低到足以阻止这种影响。
【解决方案2】:

你的原理图是这样的吗? LEDs:3v -> LEDs -> 10R -> PORTB and BUTTON:0v -> BUTTON -> RD7 或者在 Button/RD7 之间添加一个上拉电阻以避免电浮动值

【讨论】:

  • 我刚刚编辑了帖子,也许会更清楚
猜你喜欢
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
相关资源
最近更新 更多