上的PIC18读取的输入引脚的状态(Reading state of input pins on a

2019-09-16 08:58发布

我已经能够得到产出对我的工作的知情同意,并可以让一堆LED的舞蹈和关闭,因为我设置各种输出锁存器高/低。 不过,我有很多Ø困难的引脚的状态读数。

请参见下面的代码。 我建立了我的配置,并定义TRISC作为输入和TRISB作为输出。 在无限循环,我检查以查看是否RC6是高还是低,并设置整个乙锁存高或低根据结果。

#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和高科技型的ANSI C编译器。

我的连接+ 5V到VDD(引脚1),VSS(引脚20)连接到地。 我有+ 5V至C6(管脚8),和一个100K电阻器和从LED B7(引脚10)接地。 要切换RC6,我连接/ disconncet线至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 │-
     └────────┘

Answer 1:

在太平洋岛国ADC引脚不幸被配置为在上电时的模拟输入。 您需要在引脚上禁用ADC功能,使用它作为一个数字输入。

清除ANSELH位0将设置RC6为数字输入。 那么你的代码将工作。

这是记录在数据表中9.4节:端口模拟控制

PIC18F / LF1XK50数据表



Answer 2:

设置...

TRISC = 1; // input

...应该设置PORTC的仅销RC0作为输入管脚,所有其他引脚被定义为输出。 所以PORTCbits.RC6 == 0在RC6引脚不应返回正确的输入状态。

TRISC = 255应该设置PORTC的所有引脚作为输入。



Answer 3:

值得一提的是,一些其他的PIC18变种的设置有所不同:

PIC18F4520PIC18F4680需要配置引脚用作数字它海槽ADCON1寄存器,而不是ANSELH。

一个设置为1将使引脚数字

除此之外,你需要在相应的TRIS寄存器位设置为1,使其输入引脚。



文章来源: Reading state of input pins on a PIC18