我已经能够在我的PIC上运行输出,并且当我设置各种输出锁存器高/低时,可以使一堆LED跳开和关闭。但是,我在阅读状态时遇到了很多困难。
请参阅下面的代码。我设置了我的配置,并将TRISC定义为输入,将TRISB定义为输出。在无限循环中,我检查RC6是高电平还是低电平,并根据结果将整个B锁存器设置为高电平或低电平。
#include <htc.h>
__CONFIG(1, FOSC_IRC & FCMEN_OFF & IESO_OFF);
__CONFIG(2, PWRTEN_OFF & BOREN_OFF & WDTEN_OFF);
__CONFIG(3, MCLRE_OFF);
__CONFIG(4, STVREN_ON & LVP_OFF & DEBUG_OFF);
__CONFIG(5, 0xFFFF);
__CONFIG(6, 0xFFFF);
__CONFIG(7, 0xFFFF);
void main(void)
{
TRISC = 0xFF; // input
TRISB = 0x00; // output
while (1)
{
if (PORTCbits.RC6 == 0)
LATB = 0b00000000;
else
LATB = 0b11111111;
}
return;
}
代码编译良好,没有警告或错误。如果我的代码逻辑只是将锁存器设置为高电平和低电平然后工作正常,但我无法成功读取引脚的状态。
有什么想法吗?
我正在使用PIC18F14K50和MPLAB v8.43以及HiTech ANSI C编译器。
我的连接是+ 5V(VDD(引脚1),VSS(引脚20)接地。我有+ 5V到C6(引脚8),以及从B7(引脚10)到地的100K电阻和LED。要切换RC6,我将电线连接/断开连接到C6。
┌────────┐
+5v -│ 01 20 │- gnd
-│ 02 19 │-
-│ 03 18 │-
-│ 04 17 │-
-│ 05 16 │-
-│ 06 15 │-
-│ 07 14 │-
+5v -│ 08 13 │-
-│ 09 12 │-
led -│ 10 11 │-
└────────┘
答案 0 :(得分:5)
不幸的是,PIC上的ADC引脚在上电时被配置为模拟输入。您需要禁用该引脚上的ADC功能才能将其用作数字输入。
清除ANSELH的第0位将RC6设置为数字输入。那么你的代码就可以了。
这在9.4节:端口模拟控制
的数据表中有说明答案 1 :(得分:1)
设置...
TRISC = 1; // input
...只应将PORTC的RC0引脚设为输入引脚,所有其他引脚均定义为输出。
所以PORTCbits.RC6 == 0
不应该返回RC6引脚的正确输入状态。
TRISC = 255
应将PORTC的所有引脚设置为输入。
答案 2 :(得分:0)
值得一提的是,其他一些PIC18变体的设置不同:
在 PIC18F4520 和 PIC18F4680 上,您需要通过 ADCON1 寄存器而不是ANSELH将引脚配置为数字。
将位设为1 会使数字。
除此之外,您需要通过在相应的TRIS寄存器中将位设置为1来使它们成为输入引脚。