ahong 发表于 2023-7-19 10:56:35

STC8H8K64U的P2.0脚可以用PWM捕获功能做频率计吗

板子只有P2.0可以利用,想用来测量22M四分频后的5M多的频率,P2.0可以用PWMB的捕获功能测试这么高的频率吗

ahong 发表于 2023-7-19 12:05:35

我目前参考程序写的一段,能进中断,但测到的数据好像不对:




void PWM2_ISR() interrupt PWM2_VECTOR
{
    unsigned int ccr;
        if(PWM2_SR1 & 0x01)                                        // 更新中断(PWM计数器溢出)
        {
                PWM2_SR1 &= ~0x01;                                // 清零更新中断标志
                cap_overflow += 65536;                // 捕获值要加上计数器一次溢出65536
        }
    if (PWM2_SR1 & 0x02)
    {
      PWM2_SR1 &= ~0x02;
                ccr_old=ccr;                //保存当前捕获值
      ccr = (PWM2_CCR1H<<8)+PWM2_CCR1L;   //CC5捕获周期宽度
                   cycle=ccr+cap_overflow-ccr_old;        //计算周期
                cap_overflow = 0;
                f1=1;                   //周期完成
    }

}
void Frq_TEST()
{
       
    P_SW2 = 0x80;

    PWM2_CCER1 = 0x00; //CC5为输入模式,且映射到T15FP5上
        PWM2_CCMR1 = 0x01;
        PWM2_CCER1= 0x01; //使能CC5,CC6的捕获功能
        PWM2_CCER1 |= 0x00;   //设置捕获极性为CC5的上升沿

        PWM2_CR1 = 0x01;

        PWM2_IER = 0x03;                            //使能CC5捕获中断和更新中断
        EA = 1;

    while (1)
        {
                if(f1)
                {
                        f1=0;
                        PWM2_IER=0x00;
                }
                delay(500);
                freq = (u16)(FOSC/cycle)+1;
                UartSend(0xAA);
                UartSend(freq>>24);//串口发送
                UartSend(freq>>16);
                UartSend(freq>>8);
                UartSend(freq);
                UartSend(0xBB);
                PWM2_IER=0x03;                       
        }
}

梁工 发表于 2023-7-19 13:00:04

捕捉要用到中断,5M的频率是不行的,中断会响应不过来。
应该用一个计数器对外计数,最高可以测量主频一半的频率,我常用32.768M做主频,最高可以测量15M的频率。

ahong 发表于 2023-7-19 13:17:01

梁工 发表于 2023-7-19 13:00
捕捉要用到中断,5M的频率是不行的,中断会响应不过来。
应该用一个计数器对外计数,最高可以测量主频一半 ...

好的,也就是没办法用P2.0来做输入脚了对吧

梁工 发表于 2023-7-19 13:50:31

ahong 发表于 2023-7-19 13:17
好的,也就是没办法用P2.0来做输入脚了对吧

是的

xxkj2010 发表于 2024-1-3 11:56:41

梁工 发表于 2023-7-19 13:00
捕捉要用到中断,5M的频率是不行的,中断会响应不过来。
应该用一个计数器对外计数,最高可以测量主频一半 ...

请问有例程可以参考吗?

神农鼎 发表于 2024-1-3 12:56:35









梁工 发表于 2024-1-3 13:46:42

xxkj2010 发表于 2024-1-3 11:56
请问有例程可以参考吗?

没有现成的程序,很简单的,你用定时器例程,只需要设置为对外计数即可。

xxkj2010 发表于 2024-1-3 14:19:25

梁工 发表于 2024-1-3 13:46
没有现成的程序,很简单的,你用定时器例程,只需要设置为对外计数即可。 ...

需要两个定时器吗?一个作1秒计时,一个作为对外脉冲计数

梁工 发表于 2024-1-3 14:37:18

xxkj2010 发表于 2024-1-3 14:19
需要两个定时器吗?一个作1秒计时,一个作为对外脉冲计数

做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。




页: [1] 2 3 4 5
查看完整版本: STC8H8K64U的P2.0脚可以用PWM捕获功能做频率计吗