Почему этот код PIC не подсвечивает мои светодиоды?

Следующий код не установит ни одного из выводов на моем 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 и высокотехнологичный ANSI C компилятор.

Логический пробник не показывает ни одного из выводов высокого уровня, кроме VUSB и MCLR.

Есть идеи?

2 ответа

Решение

По крайней мере, некоторые контакты могут быть настроены как аналоговые входы.

Из таблицы данных для этого устройства

Работа вывода RA4 в качестве аналогового выбирается путем установки бита ANS3 в регистре ANSEL, который является настройкой по умолчанию после сброса при включении питания.

Если вы не установите регистр ANSEL, вывод не может быть использован как выход, так как он настроен как аналоговый вход.

Это относится ко всем контактам, которые могут быть входами A/D, которые не покрывают все контакты, которые у вас есть.

Опять же, я не вижу никакой настройки бит настройки в вашем коде. Это устройство, например, имеет 2 разных набора команд, и вы должны как минимум указать, какой набор команд вы используете в битах конфигурации.

Вы можете попробовать добавить это в начало вашего кода сразу после включения:

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

Я полагаю, что вы не настроили генератор 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, но файловые регистры должны иметь одинаковые имена.

Другие вопросы по тегам