21ic问答首页 - 九齐大佬们 请帮小生指教一下, 60秒在TIMER1问题
九齐大佬们 请帮小生指教一下, 60秒在TIMER1问题
九齐大佬们 请帮小生指教一下, 我此段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 ;
}
}
哪里配置问题, 多天的困扰! 谢谢
以下主要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 ;
}
}

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