问答

汇集网友智慧,解决技术难题

21ic问答首页 - 九齐大佬们 请帮小生指教一下, 60秒在TIMER1问题

九齐 TIMER1 in

九齐大佬们 请帮小生指教一下, 60秒在TIMER1问题

boya3552026-01-24
九齐大佬们 请帮小生指教一下, 我此段60秒在TIMER1中 怎么不能开启与关闭呢?
哪里配置问题, 多天的困扰!  谢谢
以下主要TIMER1的  是我的配置

  void GPIO(void)
{
    IOSTB =  C_PB3_Input;     // PB3 input mode
    PORTB = 0x08;  // PB0、PB1 & PB2 are output High
    BPHCON =0XF7;  //@@@!!!@@@!!!@@@!!!@@!@!@!@!@!26-01-21
    IOSTA =C_PA3_Output;
    PORTA &=0XE7;
   
}

void Timer0_Init()
    {DISI(); // 关闭总中断
    PCON1 = C_TMR0_Dis;                        // Disable Timer0
    TMR0 =0X06;                            // @4M 4T 2MS
   
    T0MD = C_PS0_TMR0 | C_PS0_Div8 ;        // Prescaler0 is assigned to Timer0, Prescaler0 dividing rate = 1:8,clock source is
    INTE |= C_INT_TMR0;                        // Enable Timer1 interrupt
   
    PCON1 = C_TMR0_En;                        // Enable Timer0
    ENI();                                    // Enable all unmasked interrupts            
   
    }

void Timer1_Init(void)

    {
    T1CR1 =C_TMR1_Dis;

    TMRH = 0x00;                            // Set TMR1[9:8] is 0
    TMR1 = 0xF9;                            // @4M  / 4T  1MS

    T1CR2 =C_PS1_EN | C_TMR1_ClkSrc_Inst | C_PS1_Div4;    // Enable Prescaler1, Prescaler1 dividing rate = 1:4, Timer1 clock
    INTE |= C_INT_TMR1;   
    T1CR1 = C_TMR1_Reload | C_TMR1_En;      // Enable Timer1, Initial value reloaded from TMR1, Non-stop mode
   
    ENI();
    }


void Mode_Play()
{
if(u8Mode ==0) // 第一次按键开灯
{ PA3 =1;

    Timer1_Init();
   T1CR1 =C_TMR1_En;
   INTE |=0X08;
   Timer1_60S();  //倒计时60秒后  PA3口 低电平 灯灭
  }
else if(u8Mode==1)   // 如再次按键灭也灯
  {
   PA3 =0;
  }
}
void Timer1_60S()
{         Timer1_Init();
            second ++;
          if(second>60)   //60计时!
           {second=60;
            PA3 =0;     //
           T1CR1= C_TMR1_Dis;
           INTE |=0XE7;

           }
  
}
/*********************************************************/

void System_Init(void)
{         
    OSCCR = 0x01;                //默认比较器相关关闭(b7-4);默认正常工作模式(b3-2);默认IHRC保持震荡(b1);默认系统时钟是
    PCON  = 0x98;                //默认是开启看门狗(b7);默认是关闭LVD检测(b5);默认是关闭PA5上拉(b4);默认是开启LVR检测(b3);
    delay_ms(1);              //上电延时一会等待电源稳定
  
     GPIO();
    Timer0_Init();
    Timer1_Init();
       ENI();                       //使能总中断
}

void main(void)
{  

  System_Init();

    while(1)
    {
     CLRWDT();
     Timer1_60S();
     Key_Serice();
     Mode_Play();
    }
   
}

//! interrupt service routine
void isr(void) __interrupt(0)
{
  static u8 u8timer1ms =0;
  static u8 u8tmer100ms =0;

    if(INTFbits.T0IF)
     {  INTFbits.T0IF =0;
        TMR0=0X06;
        u8timer1ms++;
        u16Timer10ms++;
        if(u8timer1ms>5)
        {u8timer1ms=0;
         key_scan();      
        }

    }
   
    if(INTFbits.T1IF)
       {
   
        Timer1_1s++;
        if(Timer1_1s >1000)   // 1S
        {
         Timer1_1s =0;
         second++;

        }
        INTFbits.T1IF =0 ;
     
          }
         
}



回答 +关注 0
2258人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册