读取PIC18上输入引脚的状态

Ozz*_*zah 2 microcontroller pic pic18 mplab

我已经能够在我的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;
}
Run Code Online (Sandbox Code Playgroud)

代码编译良好,没有警告或错误.如果我的代码逻辑只是将锁存器设置为高电平和低电平然后工作正常,但我无法成功读取引脚的状态.

有任何想法吗?

我正在使用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 ?-
     ??????????
Run Code Online (Sandbox Code Playgroud)

Ada*_*sey 5

不幸的是,PIC上的ADC引脚在上电时被配置为模拟输入.您需要禁用该引脚上的ADC功能才能将其用作数字输入.

清零ANSELH的第0位将RC6设置为数字输入.然后你的代码将工作.

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

PIC18F/LF1XK50数据表

  • 是的,将ANSEL和ANSELH设置为0将清除所有模拟功能. (2认同)