Embedded 低优先级上的计时器1不';行不通

Embedded 低优先级上的计时器1不';行不通,embedded,interrupt,microcontroller,pic,microchip,Embedded,Interrupt,Microcontroller,Pic,Microchip,我正在使用MPLAB XC8编译器,我需要使用内部时间1进行计数。我注意到,如果中断设置为高优先级,我的代码工作得非常好。然而,由于优先级低,它不起作用,我就是想不出来 计时器1设置: // 1/1 prescalar T1CONbits.T1CKPS1 = 1; T1CONbits.T1CKPS0 = 1; // Use Internal Clock T1CONbits.TMR1CS = 0; // Tim

我正在使用MPLAB XC8编译器,我需要使用内部时间1进行计数。我注意到,如果中断设置为高优先级,我的代码工作得非常好。然而,由于优先级低,它不起作用,我就是想不出来

计时器1设置:

       // 1/1 prescalar
       T1CONbits.T1CKPS1 = 1;
       T1CONbits.T1CKPS0 = 1;

       // Use Internal Clock
       T1CONbits.TMR1CS = 0;

       // Timer1 overflow interrupt
       PIE1bits.TMR1IE = 1;

       // Enable Timer 1
       T1CONbits.TMR1ON = 1;

       INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
       INTCONbits.GIE = 1; // Enable Global Interrupt
void interrupt high_priority lowISR(void) {
    if (PIR1bits.TMR1IF == 1) {

         Printf("\r\n 1 second");

        PIR1bits.TMR1IF = 0;
    }
    }
void interrupt low_priority lowISR(void) {
    if (PIR1bits.TMR1IF == 1) {

         Printf("\r\n 1 second");

        PIR1bits.TMR1IF = 0;
    }


}
这很好用

       // 1/1 prescalar
       T1CONbits.T1CKPS1 = 1;
       T1CONbits.T1CKPS0 = 1;

       // Use Internal Clock
       T1CONbits.TMR1CS = 0;

       // Timer1 overflow interrupt
       PIE1bits.TMR1IE = 1;

       // Enable Timer 1
       T1CONbits.TMR1ON = 1;

       INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
       INTCONbits.GIE = 1; // Enable Global Interrupt
void interrupt high_priority lowISR(void) {
    if (PIR1bits.TMR1IF == 1) {

         Printf("\r\n 1 second");

        PIR1bits.TMR1IF = 0;
    }
    }
void interrupt low_priority lowISR(void) {
    if (PIR1bits.TMR1IF == 1) {

         Printf("\r\n 1 second");

        PIR1bits.TMR1IF = 0;
    }


}
然而,这不是,我不知道为什么。

       // 1/1 prescalar
       T1CONbits.T1CKPS1 = 1;
       T1CONbits.T1CKPS0 = 1;

       // Use Internal Clock
       T1CONbits.TMR1CS = 0;

       // Timer1 overflow interrupt
       PIE1bits.TMR1IE = 1;

       // Enable Timer 1
       T1CONbits.TMR1ON = 1;

       INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
       INTCONbits.GIE = 1; // Enable Global Interrupt
void interrupt high_priority lowISR(void) {
    if (PIR1bits.TMR1IF == 1) {

         Printf("\r\n 1 second");

        PIR1bits.TMR1IF = 0;
    }
    }
void interrupt low_priority lowISR(void) {
    if (PIR1bits.TMR1IF == 1) {

         Printf("\r\n 1 second");

        PIR1bits.TMR1IF = 0;
    }


}

我错过了什么

您是否真的将定时器1设置为使用低优先级中断,以及是否启用中断优先级控制(默认情况下,IIRC,所有中断都使用高优先级,而不考虑单个中断源优先级位)。

我缺少以下内容,添加它们修复了我的问题。我找到了