【问题标题】:mikroc pic16f877A timer code not workingmikroc pic16f877A 计时器代码不起作用
【发布时间】:2015-02-16 19:08:46
【问题描述】:

我在 mikroc 中为 pic16f877A 编写了一个代码,其中我使用了 timer0 和 timer1。 我调试了我的代码,发现 timer0 不起作用,但我无法理解其背后的原因。我什至检查了 OPTION_REG 的数据表 但无法弄清楚问题请帮忙。 我是图片编程的新手。 我刚刚上传了设置 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;

   }

【问题讨论】:

    标签: pic mikroc


    【解决方案1】:

    您在INTCON=0xA0; 行中启用了TMR0 中断,但我没有看到它的中断服务程序。中断可能是在行工作后触发,然后因为 TMR0IF 中断标志​​(INTCON 位 2)没有被清除而保持有效。

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多