Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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/5/excel/25.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
C中的PIC-按钮不工作_C_Pic_Microchip - Fatal编程技术网

C中的PIC-按钮不工作

C中的PIC-按钮不工作,c,pic,microchip,C,Pic,Microchip,我尝试使用PIC12F675上的一个引脚作为按钮,另一个引脚作为LED。我写了这段代码,但按钮不起作用。LED灯仍然亮着。 GPIO0连接至+LED,GPIO1连接至按钮,按钮连接至接地。 请帮忙。多谢各位 #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLK

我尝试使用PIC12F675上的一个引脚作为按钮,另一个引脚作为LED。我写了这段代码,但按钮不起作用。LED灯仍然亮着。 GPIO0连接至+LED,GPIO1连接至按钮,按钮连接至接地。 请帮忙。多谢各位

#pragma config FOSC = INTRCIO   // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF         // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)

#include <xc.h>

int main(void) {

    ANSEL=0x00;                 // ANALOG SELECT REGISTER (digital)
    CMCON=0x07;                 // COPMARATOR DISABLE
    nGPPU=0;                    // GPIO pull-ups are enabled by individual port latch values
    WPU1=1;                     // WEAK PULL-UP REGISTER
    TRISIO0=0;
    TRISIO1=1;

    while(1) {

    if(GPIO1)
      GPIO0=0;
    else
      GPIO0=1;

    }
    return 0;
}
编辑1:如果我在其中注释除GPIO0=1之外的所有内容,则LED亮起。如果我在while1中注释除GPIO0=0之外的所有内容,则LED熄灭。 所以硬件可能还可以。 我认为在这个项目中不需要去盎司。 如果在原始程序中交换GPIO0=1;GPIO0=0;然后LED熄灭。PIC执行其他文件中的内容

编辑2:我现在试着用pin5作为按钮,效果很好。这是什么意思?我的图片是否损坏或代码中有错误


编辑3:现在我添加CMCON=0x07;但是没有变化。还是不起作用。若按钮在GPIO5上,则工作正常。如果按钮位于GPIO1上,则无法工作。

我知道您已通过使用不同的引脚修复了它,但最初的问题是,GPIO1,以及默认情况下正确禁用的模拟输入,也被用作比较器的输入,您也需要禁用它

引用数据表中的两个部分:

而且

因此,您处理的是ANSEL寄存器,而不是CMCON,因此您的初始化部分需要额外一行代码:

CMCON = 0x07;    // turn off comparator
如果您尝试此操作,请查看它现在是否适用于您的原始pin配置。如果您想知道0x07来自何处,请参阅显示CMCON低三位设置的位置。要禁用比较器,这三个位应设置为1,因此二进制111==0x07


“不工作”不是一个清晰的问题描述。使用调试器并提供详细信息。只是一个未来的提示:你应该登场,我不会解释,因为你可以为这件事洗耳恭听!一个按钮通常在这里是不必要的。然后检查GPIO按钮的旋转。您可能应该将问题移动到。@HannoBinder确定他们欢迎那里的代码吗?是的,我们不知道问题是软件还是硬件,我们不能通过博客调试硬件问题。你没有发布任何东西来表明硬件是正常的,即使你发布了,如果没有详细解释你是如何证明它的,也没有人会相信你。@HannoBinder:试试谷歌首次亮相吧。我得到了dict.cc条目作为第一个打击,接下来的十个条目也是关于打击的,例如Arduino。然而,YMMV。并不是你错了,我加上了CMCON=0x07;但如果按钮在GPIO1上,仍然不起作用。