为什么这个PIC代码不会点亮我的LED?

时间:2012-03-30 05:46:58

标签: c pic pic18 mplab

以下代码不会将我的PIC18F14K50上的任何引脚设置为高电平,但它不会更简单!

#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外没有任何引脚为高电平。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

至少有一些引脚可配置为模拟输入。

从此设备的数据表

  

通过设置ANS3选择引脚RA4作为模拟操作   ANSEL寄存器中的位,是a之后的默认设置   上电复位。

如果未设置ANSEL寄存器,则该引脚不能用作输出,因为它被配置为模拟输入。

这适用于所有可以作为A / D输入的引脚,它们不会覆盖您拥有的所有引脚。

然后我再次在代码中看不到任何配置位设置。该设备例如有两个不同的指令集,你必须至少指定你在配置位中使用哪个指令集。

您可以尝试在包含之后将其添加到代码顶部:

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

答案 1 :(得分: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而不适用于Hi-Tech,但文件寄存器应具有相同的名称。