2012-03-30 32 views
1

以下代碼不會將PIC18F14K50上的任何引腳設置爲高電平,但它不能更簡單!爲什麼這個PIC代碼不能點亮我的LED?

#include <pic18.h> 
#include <htc.h> 

void main(void) 
{ 
    // Set ALL pins to output: 
    TRISA = 0; 
    TRISB = 0; 
    TRISC = 0; 

    // Set ALL pins to high: 
    LATA = 0b11111111; 
    LATB = 0b11111111; 
    LATC = 0b11111111; 

    // Leave pins high and wait forever: 
    while (1); 
} 

我正在使用MPLAB v8.43和Hi-Tech ANSI C編譯器。

除VUSB和MCLR之外,邏輯探頭不會顯示任何高位引腳。

任何想法?

+0

程序看起來不錯,但它裝?是不是真的運行?您的問題可能有其他原因 – chrmue 2012-03-30 10:17:55

+0

嘗試創建一個簡單的計數器(無符號字符計數器或類似的),將其初始化爲零,並讓while循環增加它並將輸出設置爲計數器變量的值...?只是爲了確保某件事實際上正在發生 - 比靜態輸出更容易調試。 – sonicwave 2012-03-30 10:31:00

+0

代碼片段中沒有_CONFIG代表處理器顯示。你想使用什麼時鐘源?芯片內部還是你有Xtal芯片? – user957902 2012-03-30 13:50:37

回答

1

至少有一些引腳可能配置爲模擬輸入。

從數據表該設備

銷RA4作爲模擬的動作是通過設置在所述ANSEL ANS3 位寄存器其是 上電覆位後的默認設置選擇。

如果您未設置ANSEL寄存器,則該引腳不能用作輸出,因爲它被配置爲模擬輸入。

這適用於所有可以作爲A/D輸入的引腳,但不包括所有引腳。

然後我再次看不到您的代碼中的任何配置位設置。該設備例如有2個不同的指令集,你必須至少指定你在配置位中使用的指令集。

您可以嘗試添加以下內容到你的代碼的頂部包括剛過:

// Configuration BITS setup 
__CONFIG(1, FOSC_INTIO2 & XINST_OFF); 
__CONFIG(2, WDTEN_OFF & PWRTEN_ON); 
__CONFIG(3, MCLRE_OFF); 
+0

將'ANSEL'和'ANSELH'設置爲'0'確實有效。我也禁用了額外的指令集 - 我不知道這是否有任何效果,但我在幾個地方看過,如果不需要,最好禁用。謝謝你的幫助 :) – Ozzah 2012-04-10 22:42:25

0

我想你沒有配置MCPU振盪器,嘗試定義:

; Oscillator: 
    config FOSC = INTIO2   ;Internal RC oscillator 
; 
; PLL x4 Enable bit: 
    config PLLCFG = OFF 

;Define oscillator frequency 
;{ 
    movlw b'01100000' 
    movwf OSCCON 
    movlw b'01000000' 
    movwf OSCTUNE 
;}; 

這個指令是MPLAB ASM而不是高科技,但是文件寄存器應該有相同的名稱。

相關問題