简单的 PIC16F684 Input/Output

Simple PIC16F684 Input/Output

我在处理一段应该非常简单的代码时遇到了问题。我的 objective 是在按下按钮时打开 LED。在这种情况下,当我按下按钮时,输入逻辑将变低。 LED 连接到 PORTC.2,按钮连接到 PORTC.0。这是代码:

dim test as bit

main:
TRISC = %00000001 
ANSEL = %00000000
PORTC= 0
cmcon0=0

Testbutton:

 test = PORTC.0
 if test = 0 then
    PORTC = %00000100
    goto Testbutton
    end if
    PORTC = %00000000

  end.

问题是无论输入是什么,PIC 总是输出高电平。到目前为止,我已经使用万用表来验证按下按钮时输入确实从 5V 变为 0V,我尝试过使用不同的输入引脚,我也尝试过使用不同的 PIC。我怀疑由于输入总是被读取为低 PIC 可能没有正确初始化但我不完全确定。

感谢您提供的任何见解

datasheet of 16f684 在第 42 页指出:

The ANSEL and CMCON0 registers must be initialized to configure an analog channel as a digital input. Pins configured as analog inputs will read ‘0’.

这些寄存器实际上是在您的代码中初始化的。 ANSEL 初始化为 0,因此所有模拟输入都被禁用。然而,CMCON0 寄存器应初始化为 xxxxx111 或 07h。请参见第 42 页上的示例 4.3。CMCON0 的最后三位对应于比较器的操作模式,选择 111 将它们关闭。请参阅第 60 页。

如果您希望 LED 在松开按钮时再次亮起,请不要忘记添加 goto Testbutton。这可能是故意的:这取决于你!