2014-10-28 78 views
0

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

#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语句的“do stuff”部分总是运行)。

任何帮助我得到错误将不胜感激!

回答

0

您在端口F上讨论并配置输入,但是您从PINB寄存器读取端口B.

大概你应该读PINF

+0

哇。我不能相信我错过了这一点。我最初是在一个连接到B寄存器的输入上尝试这个,我遇到了同样的问题。我认为可能是某个引脚损坏了,所以我切换到了一个新的引脚,但从未切换过这一行代码。我会切换,然后看看会发生什么。谢谢。 – user3666250 2014-10-28 12:43:38

+0

我在代码中进行了更改,问题仍然存在。它的作用就好像寄存器中的那个位始终为1,当我使用引脚F1作为输入时,我无法获得完整的电路。就像我之前提到的那样,当我将按钮连接到地面时,连接到按钮的LED将亮起(电路将完成),但是当我将同一根导线连接到引脚(F1)时,则没有任何反应。 – user3666250 2014-10-28 14:54:41

+1

可能你需要一个下拉电阻? – b1gtuna 2014-10-29 15:21:16