Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从PIC引脚读取输入_C_Pic_Mplab - Fatal编程技术网

无法从PIC引脚读取输入

无法从PIC引脚读取输入,c,pic,mplab,C,Pic,Mplab,我面临着一个非常棘手的输入读取问题 我只是想用一个按钮来激活几个led,但我不知道为什么当我按下按钮时,特定端口没有变为0到1 我看到它可能与模拟有关,但我把它变成了数字 PIC16F18875 使用MPLABxV5.40 这是密码 #define _XTAL_FREQ 4000000 #define button TRISDbits.RD7 #include <xc.h> ledLoop(void){ char run = 1; while(1){

我面临着一个非常棘手的输入读取问题

我只是想用一个按钮来激活几个led,但我不知道为什么当我按下按钮时,特定端口没有变为0到1

我看到它可能与模拟有关,但我把它变成了数字

  • PIC16F18875
  • 使用MPLABxV5.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();
    
}
 
#定义频率4000000
#定义按钮TRISDbits.RD7
#包括
ledLoop(无效){
char run=1;
而(1){
if(PORTDbits.RD7==1){
LATB=运行;
run*=2;
__延时μms(200);
}
否则{
LATB=0;
}
}
}
真空总管(真空)
{
ANSELDbits.ANSD7=0;
TRISDbits.TRISD7=1;
TRISA=0;
LATA=0x00;
ledLoop();
}
此外,我的按钮已连接,如下所示:

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

编辑


如果RD的if条件=0,则4个LED工作,因此其工作正常。对于按钮部分,如果我按下按钮,led工作,但不要将PORTDbits.RD7更改为1,您的示意图是这样的吗?LED:3v->LED->10R->PORTB和BUTTON:0v->BUTTON->RD7可能会在BUTTON/RD7之间添加一个上拉按钮以避免电浮值

您的原理图是这样的吗?LED:3v->LED->10R->PORTB和BUTTON:0v->BUTTON->RD7可能会在BUTTON/RD7之间添加上拉,以避免电浮值

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

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

(关于这一点的正确说法听起来可能不同,但我想说得尽可能简单。)

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

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


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

该示意图听起来好像没有为引脚提供正确的驱动,但不清楚。请用正确的示意图进行编辑。我刚刚编辑了这篇文章,谢谢你的帮助。我说不清楚,因为这是一张试验板的照片,不是示意图,但看起来你的按钮GPIO可能刚刚接地。按下和松开按钮时,使用万用表或示波器检查您在输入引脚上看到的电压。更改
LATB=0
LATB=~LATB__延迟μms(500)并查看是否有这样的闪烁。该示意图听起来好像没有为pin提供正确的驱动器,但不清楚。请用正确的示意图进行编辑。我刚刚编辑了这篇文章,谢谢你的帮助。我说不清楚,因为这是一张试验板的照片,不是示意图,但看起来你的按钮GPIO可能刚刚接地。按下和松开按钮时,使用万用表或示波器检查您在输入引脚上看到的电压。更改
LATB=0
LATB=~LATB__延迟μms(500)