1

以下代码不会将我的 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 外没有任何引脚为高电平。

有任何想法吗?

4

2 回答 2

1

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

来自此设备的数据表

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

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

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

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

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

// Configuration BITS setup
__CONFIG(1, FOSC_INTIO2 & XINST_OFF);
__CONFIG(2, WDTEN_OFF & PWRTEN_ON);
__CONFIG(3, MCLRE_OFF);
于 2012-04-05T17:33:59.433 回答
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,但文件寄存器应具有相同的名称。

于 2012-03-30T13:34:36.050 回答