2015-11-04 41 views
-1

我想用PIC12F675上的一個引腳作爲按鈕,另一個引腳用於LED。我寫了這段代碼,但按鈕沒有工作。 LED仍然亮着。 GPIO0連接到+ LED,GPIO1連接到按鈕,按鈕連接到地。 請幫忙。謝謝。C中的PIC按鈕不起作用

#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) 
#pragma config WDTE = OFF  // Watchdog Timer Enable bit (WDT disabled) 
#pragma config PWRTE = OFF  // Power-Up Timer Enable bit (PWRT disabled) 
#pragma config MCLRE = OFF  // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD) 
#pragma config BOREN = OFF  // Brown-out Detect Enable bit (BOD disabled) 
#pragma config CP = OFF   // Code Protection bit (Program Memory code protection is disabled) 
#pragma config CPD = OFF  // Data Code Protection bit (Data memory code protection is disabled) 

#include <xc.h> 

int main(void) { 

    ANSEL=0x00;     // ANALOG SELECT REGISTER (digital) 
    CMCON=0x07;     // COPMARATOR DISABLE 
    nGPPU=0;     // GPIO pull-ups are enabled by individual port latch values 
    WPU1=1;      // WEAK PULL-UP REGISTER 
    TRISIO0=0; 
    TRISIO1=1; 

    while(1) { 

    if(GPIO1) 
     GPIO0=0; 
    else 
     GPIO0=1; 

    } 
    return 0; 
} 

編輯1:如果我評論的同時一切(1)除GPIO0 = 1,LED燈亮。如果我在(1)除了GPIO0 = 0之外評論所有內容,LED熄滅。 所以可能硬件是好的。 我認爲這個程序中沒有必要去抖動。 如果在原始程序中交換GPIO0 = 1;和GPIO0 = 0;那麼LED熄滅。 PIC執行其他內容。

編輯2:我現在嘗試使用pin5按鈕,它的工作原理。這是什麼意思?我的PIC是否損壞或代碼有錯誤?

編輯3:現在我添加CMCON = 0x07;但沒有變化。仍然沒有工作。如果按鈕在GPIO5上,它工作正常。如果按鈕在GPIO1上,則不起作用。

+4

「不工作」不是一個明確的問題描述。使用調試器並提供詳細信息。只是一個未來的提示:你應該放棄(我不會解釋,因爲你可以這樣做!)一般按鈕(這裏沒有必要)。並檢查按鈕-GPIO上的vlotage。 – Olaf

+0

您可能應該將您的問題移至http://electronics.stackexchange.com/。 – JimmyB

+0

@HannoBinder確定他們歡迎代碼? – Downvoter

回答

1

我知道你已經通過使用不同的引腳「固定」了它,但最初的問題是GPIO1以及默認情況下(默認情況下禁用了它)的模擬輸入也用作輸入比較器,您還需要禁用它。

從數據表中引用兩個部分:

cmp1

cmp2

所以,你處理了ANSEL寄存器但不CMCON,因此您的初始化部分需要的附加的代碼行:

CMCON = 0x07; // turn off comparator 

如果您嘗試此操作,請查看它是否適用於原始引腳配置。如果您想知道0x07來自哪裏,請參閱page 37 of the datasheet,其中顯示了CMCON的較低三位的設置。要禁用比較器,應將這三位設置爲1,因此二進制111 == 0x07。

cmp3

+0

我加CMCON = 0x07;但如果按鈕位於GPIO1上,仍然不起作用。 – Matej