Pic 18f4550 с кристаллом 20 МГц, работающим на мигающем светодиоде 48 МГц

У меня есть этот код, который мигает светодиодом, вопрос в том, правильно ли я настраиваю предохранители, потому что светодиод мигает 47 секунд и 47 секунд выключается, когда delay_ms равен 1000. Я использую компилятор CCS C 5.059. Спасибо за совет.

#include <18F4550.h> 
#include<stdlib.h>
#include<math.h>
#fuses PLL5,HSPLL,CPUDIV2,USBDIV,NOWDT,NOPROTECT,NOLVP, VREGEN
#use delay(clock=48000000,crystal=20MHz) 
//========================== 
void main() 
{ 
  while(TRUE) 
  { 
   output_high(PIN_D0); 
   delay_ms(1000); 
   output_low(PIN_D0); 
   delay_ms(1000); 
  } 
}

person Emm    schedule 24.03.2017    source источник


Ответы (1)


Компилятор CCS C установит правильные фьюзы генератора на основе параметров, которые вы передаете в #use delay(). Он также выполняет проверку работоспособности параметров #use delay(), чтобы убедиться, что они совместимы. Измените свои #fuses и #use delay() на это, чтобы компилятор CCS C сделал это правильно для вас:

#fuses NOWDT, NOPROTECT, NOLVP, VREGEN
#use delay(clock=48MHz ,crystal=20MHz, USB_FULL)

Я также добавил параметр USB_FULL к параметру #use delay(), который также настраивает другие части PLL для работы на полной скорости USB (которую, похоже, вы хотели использовать).

Вы заметите, что я удалил фьюзы PLL5,HSPLL,CPUDIV2 и USBDIV из вашего кода, так как они будут установлены #use delay()

person da66en    schedule 18.03.2018