我试图计算使用两个事件之间的时间间隔CCP
上PIC18F4520。事件由ccp1
和ccp2
端口上的两个传感器触发。我已将 8 的预标量分配给T1CON
并且我使用的是 16 MHz 的晶体。(一个时钟周期的持续时间为 2e-6 秒)由于我在溢出之前可以测量的最长时间仅为 0.13 秒(65536 x 2e-6),并且我正在测量的事件持续大约 0.32 秒,因此我决定数一数次TMR1IF
溢出,然后将其乘以 65536 并将其添加到捕获的CCPR1H:CCPR1L
值中。
但是,我无法计数超出TMR1IF
寄存器的一次溢出。
希望有人知道为什么!
下面是相关的函数
void ccp_Init(void)
{
TRISCbits.RC2 = 1;
TRISCbits.RC1 = 1;
CCP1CON = 0x05;
CCP2CON = 0x05;
T3CON = 0x00;
PIE1bits.CCP1IE=1;
PIE2bits.CCP2IE=1;
T1CON = 0x30;
TMR1H = 0;
TMR1L = 0;
PIR1bits.CCP1IF = 0;
PIR2bits.CCP2IF = 0;
PIR1bits.TMR1IF = 0;
}
int ccp_get(void)
{
int count = 0;
TMR1L = 0;
TMR1H = 0;
while(PIR2bits.CCP2IF == 0);
T1CONbits.TMR1ON = 1;
while (PIR1bits.CCP1IF == 0);
{
if (PIR1bits.TMR1IF == 1)
{
PIR1bits.TMR1IF = 0;
TMR1L = 0;
TMR1H = 0;
count = count+1;
T1CONbits.TMR1ON = 1;
}
}
T1CONbits.TMR1ON = 0;
return count;
}
从上面的代码int ccp_get()
返回 TMR1IF 溢出的次数并且不会超过 1。