找回密码
 立即注册
查看: 1080|回复: 45

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

[复制链接]
  • TA的每日心情
    慵懒
    2023-12-2 09:55
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    13

    主题

    73

    回帖

    593

    积分

    高级会员

    积分
    593
    发表于 2023-7-19 10:56:35 | 显示全部楼层 |阅读模式
    板子只有P2.0可以利用,想用来测量22M四分频后的5M多的频率,P2.0可以用PWMB的捕获功能测试这么高的频率吗
    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-2 09:55
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    13

    主题

    73

    回帖

    593

    积分

    高级会员

    积分
    593
     楼主| 发表于 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;                       
            }
    }
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3004

    回帖

    6771

    积分

    超级版主

    积分
    6771
    发表于 2023-7-19 13:00:04 | 显示全部楼层
    捕捉要用到中断,5M的频率是不行的,中断会响应不过来。
    应该用一个计数器对外计数,最高可以测量主频一半的频率,我常用32.768M做主频,最高可以测量15M的频率。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-2 09:55
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    13

    主题

    73

    回帖

    593

    积分

    高级会员

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

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

    点评

    是的  详情 回复 发表于 2023-7-19 13:50
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3004

    回帖

    6771

    积分

    超级版主

    积分
    6771
    发表于 2023-7-19 13:50:31 | 显示全部楼层
    ahong 发表于 2023-7-19 13:17
    好的,也就是没办法用P2.0来做输入脚了对吧

    是的
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:06
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-3 11:56:41 | 显示全部楼层
    梁工 发表于 2023-7-19 13:00
    捕捉要用到中断,5M的频率是不行的,中断会响应不过来。
    应该用一个计数器对外计数,最高可以测量主频一半 ...

    请问有例程可以参考吗?

    点评

    没有现成的程序,很简单的,你用定时器例程,只需要设置为对外计数即可。  详情 回复 发表于 2024-1-3 13:46
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9420

    回帖

    1万

    积分

    管理员

    积分
    13985
    发表于 2024-1-3 12:56:35 | 显示全部楼层
    截图202401031254565615.jpg


    截图202401031255447579.jpg


    截图202401031256289780.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3004

    回帖

    6771

    积分

    超级版主

    积分
    6771
    发表于 2024-1-3 13:46:42 | 显示全部楼层
    xxkj2010 发表于 2024-1-3 11:56
    请问有例程可以参考吗?

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:06
  • 签到天数: 168 天

    [LV.7]常住居民III

    67

    主题

    848

    回帖

    2844

    积分

    金牌会员

    积分
    2844
    发表于 2024-1-3 14:19:25 | 显示全部楼层
    梁工 发表于 2024-1-3 13:46
    没有现成的程序,很简单的,你用定时器例程,只需要设置为对外计数即可。 ...

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

    点评

    做频率计,可以参考我的示波器的频率计:P3.5(T1)输入频率信号,P3.3是闸门信号。 [attachimg]31787[/attachimg] [attachimg]31794[/attachimg]  详情 回复 发表于 2024-1-3 14:37
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3004

    回帖

    6771

    积分

    超级版主

    积分
    6771
    发表于 2024-1-3 14:37:18 | 显示全部楼层
    xxkj2010 发表于 2024-1-3 14:19
    需要两个定时器吗?一个作1秒计时,一个作为对外脉冲计数

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

    截图202401031435465899.jpg

    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-14 00:43 , Processed in 0.071724 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表