起初我有定时器0运行模式下正常工作。 唯一的问题是当设备进入睡眠模式,定时器0停止计数,直到醒来。 在数据表它说,使用定时器1,能够在睡眠模式监视时间。 我修改定时器0现有代码TIMER1新的配置,其他代码几乎是一样的。 然而,有件事我可能已经错过了大约TIMER1定时器0比不同,因为Timer1不计数的。 我使用的PIC是PIC18F87J11与MPLAB C18。
我将分享这似乎相关的代码,并根据要求需要我会添加更多。
定时器0代码段(从头文件)
#define TMR_IF INTCONbits.TMR0IF
#define TMR_IE INTCONbits.TMR0IE
#define TMR_IP INTCON2bits.TMR0IP
#define TMR_ON T0CONbits.TMR0ON
#define TMR_CON T0CON
#define TMR_L TMR0L
#define TMR_H TMR0H
定时器0(由C文件)
TMR_CON = 0b00000000 | CLOCK_DIVIDER_SETTING;
TMR_IP = 1;
TMR_IF = 0;
TMR_IE = 1;
TMR_ON = 1;
定时器0(如果我增加的时间)
if(TMR_IF)
{
printf("\r\n Passed here");
timer_counter_high++;
}
输出: 这里传递
定时器1代码段(从头文件)
#define TMR_IF PIR1bits.TMR1IF
#define TMR_IE PIE1bits.TMR1IE
#define TMR_IP IPR1bits.TMR1IP
#define TMR_ON T1CONbits.TMR1ON
#define TMR_CON T1CON
#define TMR_L TMR1L
#define TMR_H TMR1H
定时器1(由C文件)
TMR_CON = 0b11101101 | CLOCK_DIVIDER_SETTING;
TMR_IP = 1;
TMR_IF = 0;
TMR_IE = 1;
TMR_ON = 1;
定时器1(如果我增加的时间)
if(TMR_IF)
{
printf("\r\n Passed here");
timer_counter_high++;
}
else
{
printf("\r\n Did not come through");
}
输出: 没有来过
编辑:增加了CLOCK_DIVIDER_SETTING代码的要求。 这是正在使用的定时器0和定时器
#elif(CLOCK_FREQ <= 8000000)
#define CLOCK_DIVIDER 32
#define CLOCK_DIVIDER_SETTING 0x04
#define SYMBOL_TO_TICK_RATE 8000000
我还是没有把睡眠模式,该器件在这种条件下进行测试定时器1,首先,我要弄清楚为什么Timer1是不是运行模式中计数。 我会很高兴与我的问题,任何帮助或想法,谢谢!
编辑2:我喜欢回答一些问题
Q1:可以定时器1仍与内部振荡器就像TIMER0使用吗?
Q2:你如何计算T1CON正确CLOCK_DIVIDER_SETTING? (我需要它,如果T1SYNC置和预分频器?)