2014-10-28 111 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