mikroc pic16f877A计时器代码不起作用



我用mikroc为pic16f877A编写了一段代码,其中我使用了timer0和timer1。我调试了我的代码,发现timer0不工作,但我不明白它背后的原因。我甚至检查了数据表中的OPTION_REG但无法解决问题,请帮忙。我是pic编程的新手。我刚刚上传了timer0和timer1的设置函数。UART用于检查每一行是否正在执行,我发现在打印TMR1H的值后它停止了。

     int feedback()
     {
     sh = 0;
     UART1_WRITE_TEXT("inside feedback");
     UART1_Write(13); // newline
     TMR0=193;
     Uart1_Intout_ReturnInt(TMR0);
     UART1_Write(13); // newline
     INTCON=0xA0;
     Uart1_Intout_ReturnInt(INTCON);
     UART1_Write(13); // newline
     TMR1L=0;
     Uart1_Intout_ReturnInt(TMR1L);
     UART1_Write(13); // newline
     TMR1H=0;
     Uart1_Intout_ReturnInt(TMR1H);
     UART1_Write(13); // newline
     OPTION_REG.PSA=0;
     OPTION_REG.PS2=0;
     OPTION_REG.PS1=1;
     OPTION_REG.PS0=0;
     OPTION_REG.T0SE=0;
     OPTION_REG.T0CS=0;
     UART1_WRITE_TEXT("timer0 start");
     UART1_Write(13); // newline
     T1CON=0x07;
     UART1_WRITE_TEXT("timer1 start");
     UART1_Write(13); // newline
     sh=1;
     Uart1_Intout_ReturnInt(sh);
     UART1_Write(13); // newline
    while(sh==1){
    Uart1_Intout_ReturnInt(sh);
    UART1_Write(13); // newline
    UART1_WRITE_TEXT("inside while loop");
    }
    UART1_WRITE_TEXT("outside while loop");
    TMR1H=TMR1H*1000;
    sh=TMR1H+TMR1L;
    actualOut=(60*2*sh)/8;
    Uart1_Intout_ReturnInt(actualOut);
    UART1_Write(13); // newline
    return actualOut;
   }
   void interrupt(){
   T1CON=0x00;
   sh=0;
   }

您正在INTCON=0xA0;行中启用TMR0中断,但我没有看到它的中断服务例程。该中断可能是在工作的行之后触发的,然后由于TMR0IF中断标志(INTCON位2)未被清除而保持断言。

相关内容

  • 没有找到相关文章

最新更新