【问题标题】:Read Input on Pin (Teensy)读取引脚上的输入(小)
【发布时间】:2014-10-28 00:47:10
【问题描述】:

我开始玩 Teensy 2,以及学习 C 代码。目前我正在尝试弄清楚如何将引脚设置为输入。我的代码如下:

#include <avr/io.h>
#include <avr/pgmspace.h>
#include "usb_debug_only.h"
#include "print.h"
#include <util/delay.h>

#define RED_LED_ON  (PORTB |= (1<<7))
#define RED_LED_OFF  (PORTB &= ~(1<<7))

#define GREEN_LED_ON  (PORTD |= (1<<2))
#define GREEN_LED_OFF  (PORTD &= ~(1<<2))

#define BLUE_LED_ON  (PORTC |= (1<<7))
#define BLUE_LED_OFF  (PORTC &= ~(1<<7))

#define SWITCH_OUT_CONFIG (DDRD |= (1<<6), PORTD |= (1<<6))

#define SWITCH_IN_CONFIG (DDRF &= ~(1<<1), PORTF |= (1<<1))

#define LED_CONFIG  (DDRB |= (1<<0))
#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))

#define MY_DELAY 100

int main(void) {
    // set for 16 MHz clock, and make sure the LED is off
    CPU_PRESCALE(0);
    LED_CONFIG;
    /*SWITCH_IN_CONFIG;
    SWITCH_OUT_CONFIG;*/

    DDRD |= (1<<6); //Set pin D6 as output
    DDRF &= ~(1<<1); //Set pin F1 as input

    PORTD |= (1<<6); //Set pin D6 output to high
    PORTF |= (1<<1); //Set pin F1 to act as pullup resistor

    RED_LED_OFF;
    GREEN_LED_OFF;
    BLUE_LED_OFF;

    // initialize the USB, but don't want for the host to
    // configure.  The first several messages sent will be
    // lost because the PC hasn't configured the USB yet,
    // but we care more about blinking than debug messages!
    usb_init();

    for(;;) {
        if(PINF & (1<<1)) {
            /*Do stuff here, since button is pushed*/
    }
    else {
        /*Do nothing*/
    }
}

}

我目前遇到的问题是我的输入输入 (F1) 没有完成电路。我把它连接到一个按钮上。当我将该按钮直接接地时,电路就完成了,当我按下按钮时,它所连接的 LED 会亮起。当我将连接切换到此引脚时,它什么也不做。据我目前所知(这似乎是不正确的),当连接到另一个输出高信号的引脚(在本例中为 D6,我知道它正在工作,因为我可以在按钮电路中使用它时,该引脚应该读为高电平)当它接地时)。相反,它所连接的寄存器中该引脚的值似乎始终为“1”(if else 语句的“do stuff”部分始终在运行)。

对于我遇到的问题的任何帮助将不胜感激!

【问题讨论】:

    标签: c embedded teensy


    【解决方案1】:

    您在端口 F 上谈论和配置输入,但您从 PINB 寄存器中读取端口 B。

    大概,你应该阅读PINF

    【讨论】:

    • 哇。我不敢相信我错过了。我最初是在连接到 B 寄存器的输入上尝试这个,我遇到了同样的问题。我认为可能是那个引脚损坏了一些东西,所以我换了一个新的引脚,但从未切换过那行代码。我会切换它,然后看看会发生什么。谢谢。
    • 我对代码进行了更改,但问题仍然存在。就好像寄存器中的那个位总是 1,当我使用引脚 F1 作为输入时,我无法获得完整的电路。就像我之前提到的,当我将按钮接地时,连接到按钮的 LED 会亮起(电路将完成),但是当我将同一根线连接到引脚 (F1) 时,什么也没有发生。
    • 可能你需要一个下拉电阻?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多