2012-03-30 72 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而不是高科技,但是文件寄存器应该有相同的名称。

相关问题