PIC timer1 прерывание никогда не происходит - PullRequest
0 голосов
/ 07 мая 2019

Здравствуйте. Я пытаюсь использовать прерывание timer1 на PIC18F26K83.Я использую Micro C в качестве компилятора.Поэтому я установил таймер на 30 мс, и после этих 30 мсек он должен ввести прерывание и зажечь светодиод.Но он никогда не загорается светодиодом (никогда не входит в прерывание / прерывания не происходит.).Код:

 #define led LATA.RA2
void Clk_8Mhz(){
   //8 MHz clock
          //  OSCCON1 REGISTER
   NOSC2_BIT=1;
  NOSC1_BIT=1;
   NOSC0_BIT=0;//HF INTERNAL OSC
   //OSCFRQ REGISTER HFINTOSC FREQ. SELECTION


OSCCON1 =0b01100000; //HFINTOSC, Divider =1;
    FRQ3_BIT=0;
   FRQ2_BIT=0;
   FRQ1_BIT=1;
   FRQ0_BIT=1;    // 0011 :8MHz     //0100 = 16 Mhz
  }


  //Timer1
//Prescaler 1:1; TMR1 Preload = 5536; Actual Interrupt Time : 30 ms

void InitTimer1(){
  T1CON  = 0x01;
  TMR1IF_bit     = 0;
  TMR1H  = 0x15;
  TMR1L  = 0xA0;
  TMR1IE_bit     = 1;
  INTCON     = 0xC0;
}

void main (){
TRISA.B2=0;
led=0;
clk_8Mhz();
InitTimer1();
while(1){
 delay_ms(10);
}   }

void Interrupt(){
  if (TMR1IF_bit){
    TMR1IF_bit = 0;
    TMR1H    = 0x15;
    TMR1L    = 0xA0;
    led=1;
  }
}

Что может быть причиной этого никогда не происходящего прерывания?Заранее спасибо.

1 Ответ

0 голосов
/ 13 мая 2019

Попробуйте установить бит конфигурации MVECEN в положение OFF (часть CONFIG2L), поскольку для этого требуется код void Interrupt(), см. Также Официальное заявление о проблемах семейства K42 и K83 (Mikro C)

Support for Interrupt Vector table for K42/K83 families was not implemented, only the legacy interrupt approach was supported.

...