找回密码
 立即注册
查看: 61|回复: 6

大神们,在PWM中断中进行脉冲计数,是否可以?急

[复制链接]
  • TA的每日心情
    难过
    2024-4-17 09:49
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    5

    主题

    13

    回帖

    111

    积分

    注册会员

    积分
    111
    发表于 2024-4-16 08:42:39 | 显示全部楼层 |阅读模式

    截图202404160838121024.jpg




    void        PWM_config(void)
    {

             P_SW2 |=  0x80;                        // 访问XFR

            PWM2T1 = CYCLE;        // 第一个翻转匹配点
            PWM3T1 = CYCLE;        // 第一个翻转匹配点
            PWM4T1 = CYCLE;        // 第一个翻转匹配点
            PWM5T1 = CYCLE;        // 第一个翻转匹配点
    //        PWM6T1 = 0;        // 第一个翻转匹配点
    //        PWM7T1 = 0;        // 第一个翻转匹配点
      
            PWM2T2 = PWM2_Claw ;        // 第二个翻转匹配点
            PWM3T2 = PWM3_Updn;        // 第二个翻转匹配点
            PWM4T2 = PWM4_Ltrt;        // 第二个翻转匹配点
            PWM5T2 = CYCLE/2;        // 第二个翻转匹配点         PWM5_Ftbk
             
    //        PWM6T2 = 1000;        // 第二个翻转匹配点
    //        PWM7T2 = 1200;        // 第二个翻转匹配点

                    //        PWMxCR;        //7位 6位 5位 4位      3位        2位            1位               0位
                                            // -   -   -   -    管脚选择  允许PWMx中断  允许T2匹配时中断  允许T1匹配时中断
            PWM2CR = PWM2_P37;        //PWM2_P37 PWM2_P27                //上下
            PWM3CR = PWM3_P21;        //PWM3_P21 PWM3_P45                //夹牌
            PWM4CR = PWM4_P22;        //PWM4_P22 PWM4_P44                //过牌
            PWM5CR = PWM5_P23;        //PWM5_P23 PWM5_P42            //发牌
    //        PWM6CR = PWM6_P07;        //PWM6_P16 PWM6_P07
    //        PWM7CR = PWM7_P06;        //PWM7_P17 PWM7_P06

            PWMCFG = 0x00;        //7位    6位                5位    4位    3位    2位    1位    0位
                                            //置0  1-计数器归零触发ADC C7INI  C6INI  C5INI  C4INI  C3INI  C2INI
                                            //     0-归零时不触发ADC       (值为1时上电初始高电平,为0低电平)

            P37 = 0;
            P3n_push_pull(1<<7);        //IO设置为推挽输出, 上电时为高阻
            P21 = 0;
            P2n_push_pull(1<<1);        //IO设置为推挽输出, 上电时为高阻
            P22 = 0;
            P2n_push_pull(1<<2);        //IO设置为推挽输出, 上电时为高阻
            P23 = 0;
            P2n_push_pull(1<<3);        //IO设置为推挽输出, 上电时为高阻
    //        P06 = 1;                                //停止PWM时输出高电平
    //        P0n_push_pull(1<<6);        //IO设置为推挽输出, 上电时为高阻
    //        P07 = 0;                                //停止PWM时输出低电平
    //        P0n_push_pull(1<<7);        //IO设置为推挽输出, 上电时为高阻

            PWMCKS = 0x00;        //7位6位5位    4位             3位    2位    1位    0位
                                            //   置0    0-系统时钟分频          分频参数设定
                                            //          1-定时器2溢出       时钟=系统时钟/([3:0]+1)

            PWMIF = 0x00;        //7位    6位                5位    4位    3位    2位    1位    0位
                                            //置0  计数器归零中断标志            相应PWM端口中断标志

            PWMFDCR = 0x00;        //7位    6位       5位                4位
                                            //置0    置0 外部异常检测开关  外部异常时0-无反应 1-高阻状态
                                            //3位             2位                 1位                0位
                                            //PWM异常中断  比较器与异常的关系   P2.4与异常的关系  PWM异常标志

            PWMC = CYCLE;                // PWM计数器周期  2000         CYCLE

            PWMCR = 0x80+0x0f;        // 7位          6位           5位   4位   3位   2位   1位   0位
                                                    //ENPWM         ECBI         ENC7O ENC6O ENC5O ENC4O ENC3O ENC2O
                                                    //PWM开关 计数归零中断开关   相应I/O为GPIO模式(0)或PWM模式(1)

    //        PWMFDCR = ENFD | FLTFLIO | FDIO;        //PWM失效中断控制,  ENFD | FLTFLIO | EFDI | FDCMP | FDIO
    }         



    /********************* PWM中断函数************************/
      
    void PWM_int (void) interrupt PWM_VECTOR          // #define PWM_VECTOR         22                      
    {
            if(PWMIF & CBIF)        //PWM计数器归零中断标志
            {
                    PWMIF &= ~CBIF;        //清除中断标志
            }

            if(PWMIF & C2IF)        //PWM2中断标志
            {
                    PWMIF &= ~C2IF;        //清除中断标志
            }

            if(PWMIF & C3IF)        //PWM3中断标志
            {
                    PWMIF &= ~C3IF;        //清除中断标志

            }


            if(PWMIF & C4IF)        //PWM4中断标志
            {
                    PWMIF &= ~C4IF;        //清除中断标志

            }


            if(PWMIF & C5IF)        //PWM5中断标志
            {               
                   
                    PWMIF &= ~C5IF;        //清除中断标志

                Pul_FP ++;                                                                                           //在PWM中断中进行脉冲计数,是否可以?          
                    if( Pul_FP>=6000){  SBUF=0x88;  SLeep_FP   =0; }         //   SleepMFP_OFF();
            }



            if(PWMIF & C6IF)        //PWM6中断标志
            {
                    PWMIF &= ~C6IF;        //清除中断标志
            }

            if(PWMIF & C7IF)        //PWM7中断标志
            {
                    PWMIF &= ~C7IF;        //清除中断标志
            }

    }


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 155 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1293

    积分

    荣誉版主

    积分
    1293
    发表于 2024-4-16 09:05:13 | 显示全部楼层
    完全可以。
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    68

    主题

    569

    回帖

    1852

    积分

    超级版主

    积分
    1852
    QQ
    发表于 2024-4-16 09:05:55 | 显示全部楼层
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    26

    主题

    1290

    回帖

    4007

    积分

    论坛元老

    积分
    4007
    发表于 2024-4-16 09:09:07 | 显示全部楼层
    可以使用中断进行脉冲计数,STC8G范例程序、STC8A8K64D4实验箱例程包里面都有对应的例子
    截图202404160908575245.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    15 分钟前
  • 签到天数: 54 天

    [LV.5]常住居民I

    4

    主题

    129

    回帖

    273

    积分

    中级会员

    积分
    273
    发表于 2024-4-16 10:09:26 | 显示全部楼层
    这个应该是没问题
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    难过
    2024-4-17 09:49
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    5

    主题

    13

    回帖

    111

    积分

    注册会员

    积分
    111
     楼主| 发表于 2024-4-16 10:39:24 | 显示全部楼层

    但是调试的时候,计数到了电机没停下来。
    是什么问题?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    难过
    2024-4-17 09:49
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    5

    主题

    13

    回帖

    111

    积分

    注册会员

    积分
    111
     楼主| 发表于 2024-4-16 10:45:20 | 显示全部楼层
    lezjin 发表于 2024-4-16 10:09
    这个应该是没问题

    但是计数满的时候,电机没有停下来,好像程序没有跑进中断一样
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-30 23:01 , Processed in 0.064116 second(s), 56 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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