找回密码
 立即注册
查看: 717|回复: 7

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

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2024-08-29 18:56:53

8

主题

10

回帖

147

积分

注册会员

积分
147
发表于 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;        //清除中断标志
        }

}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:559
  • 最近打卡:2025-06-17 07:05:23

24

主题

524

回帖

1228

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:187
  • 最近打卡:2025-06-17 11:30:23
已绑定手机

95

主题

977

回帖

2479

积分

超级版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7089

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-06-17 07:59:56

23

主题

296

回帖

1274

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2024-08-29 18:56:53

8

主题

10

回帖

147

积分

注册会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2024-08-29 18:56:53

8

主题

10

回帖

147

积分

注册会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2025-05-11 11:03:06
已绑定手机

36

主题

563

回帖

1972

积分

荣誉版主

积分
1972
发表于 2024-5-11 22:35:50 | 显示全部楼层
试试先计数处理,处理完再清标志位呢?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-18 01:44 , Processed in 0.160466 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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