首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取PIC18上输入引脚的状态

读取PIC18上输入引脚的状态
EN

Stack Overflow用户
提问于 2012-04-05 07:05:05
回答 3查看 20K关注 0票数 2

我已经能够让我的PIC上的输出工作,并可以使一堆LED舞动和关闭时,我设置各种输出锁存器高/低。然而,在大头针的状态下,我有很多阅读上的困难。

请参阅下面的代码。我设置了我的配置,并将TRISC定义为输入,TRISB定义为输出。在无限循环中,我检查RC6是高还是低,并根据结果将整个B锁存器设置为高或低。

代码语言:javascript
复制
#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和MPLABv8.43以及HiTech ANSI编译器。

我的连接是+5V到VDD (引脚1),VSS (引脚20)到地。我有+5V到C6 (引脚8),和一个100K的电阻和发光二极管从B7 (引脚10)到地。为了切换RC6,我连接/断开了与C6的连接线。

代码语言:javascript
复制
     ┌────────┐
+5v -│ 01  20 │- gnd
    -│ 02  19 │-
    -│ 03  18 │-
    -│ 04  17 │-
    -│ 05  16 │-
    -│ 06  15 │-
    -│ 07  14 │-
+5v -│ 08  13 │-
    -│ 09  12 │-
led -│ 10  11 │-
     └────────┘
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-05 22:20:24

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

清除ANSELH的位0会将RC6设置为数字输入。然后你的代码就可以工作了。

在数据手册的9.4节:端口模拟控制中记录了这一点

PIC18F/LF1XK50 Datasheet

票数 5
EN

Stack Overflow用户

发布于 2012-04-05 08:35:01

设置中...

代码语言:javascript
复制
TRISC = 1; // input

...should仅将PORTC的引脚RC0设置为输入引脚,所有其他引脚均定义为输出。因此PORTCbits.RC6 == 0不应该在RC6引脚中返回正确的输入状态。

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

票数 2
EN

Stack Overflow用户

发布于 2015-05-20 16:39:01

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

PIC18F4520PIC18F4680上,您需要通过ADCON1寄存器而不是ANSELH将引脚配置为数字引脚。

将引脚位设置为1将使引脚成为数字

此外,您还需要通过将相应TRIS寄存器中的一个位设置为1来使其输入引脚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10020506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档