Timer PIC16f877a定时器0代码不工作

Timer PIC16f877a定时器0代码不工作,timer,interrupt,pic,microchip,mplab,Timer,Interrupt,Pic,Microchip,Mplab,最近,我尝试制作一个程序,使用timer0从255溢出到0,并转到isr代码,当我在microchip的timer0数据表教程中学习时,按下T0CKI引脚上的按钮一次,该代码将点亮led,但无论我试图从代码中更改什么,它都无法工作,该代码是用XC8编译的MPLAB X IDE编写的,代码如下: #include "config.h" void interrupt ISR(); void INIT(); void main(){ INIT(); while(1){

最近,我尝试制作一个程序,使用timer0从255溢出到0,并转到isr代码,当我在microchip的timer0数据表教程中学习时,按下T0CKI引脚上的按钮一次,该代码将点亮led,但无论我试图从代码中更改什么,它都无法工作,该代码是用XC8编译的MPLAB X IDE编写的,代码如下:

#include "config.h"

void interrupt ISR();
void INIT();

void main(){
    INIT();
    while(1){
        if(PORTAbits.RA4 == 1){
            TMR0--;
        }
    }

}

void interrupt ISR(){

        if(INTCONbits.TMR0IF == 1 && INTCONbits.TMR0IE == 1){
            TMR0 = 255;
            INTCONbits.TMR0IF = 0;
            PORTDbits.RD0 = 1;
        }else{
            PORTDbits.RD0 = 0;
        }

}

void INIT(){
    INTCON = 0b11100000;
    OPTION_REG = 0b11100111;
    TRISDbits.TRISD0 = 0;
    PORTDbits.RD0 = 0;
    TRISAbits.TRISA4 = 1;
    TMR0 = 255;
}
这是main.c,我在这里编写了所有的代码config.h就是我在MPLAB中使用Windows->configuration bits设置配置位的地方


提前感谢所有回复者,非常感谢

计时器硬件不会检查算术运算的结果。只有在没有内核干预的情况下(即计时器正在运行且从255溢出回零),才会设置中断标志。当您这样做时:

TMR0--;
它基本上是在核心硬件中实现的

Read TMR0 memory location
Add 1
Write TMR0 memory location

你检查TMR0IE。您在哪里设置它?它是intcon寄存器中设置为1-on的第5位-