找回密码
 立即注册
查看: 420|回复: 4

PWM变频程序会中断 | 已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-29 11:51:36

1

主题

2

回帖

59

积分

注册会员

积分
59
发表于 2024-4-1 14:46:47 | 显示全部楼层 |阅读模式
#include "STC8H.h"
#include "intrins.h"

unsigned char Cyc=80;
bit ci=0;

void Timer0_Init(void)                //1毫秒@24.000MHz
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x40;                                //设置定时初始值
        TH0 = 0xa2;                                //设置定时初始值
        ET0 = 1;                                   //使能定时器中断
        TR0 = 1;                                //启动定时器0
}
void PWMA_Init()
{
        P_SW2 = 0x80;
        PWMA_DTR = 80;
    PWMA_CCER1 = 0x00;                        //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR2 = 0x68;                        //设置CC2为PWMA输出模式
    PWMA_CCER1 = 0x50;                        //使能CC2通道
    PWMA_ARR = 560;                                //设置周期时间           610/39.7k   560/42.4k
    PWMA_CCR2 = 280;                        //设置占空比时间   290
    PWMA_ENO = 0x0C;                        //使能PWMA_2端口输出
    PWMA_BKR = 0x80;                        //使能主输出
    PWMA_CR1 = 0x01;                        //开始计时
}

void main(void)
{
    P1M1 &= 0xF3;
    P1M0 |= 0x0C;
    P3M0 &= ~0x18;
        P3M1 &= ~0x18;
        P3PU |= 0x18;  
        Timer0_Init();
        PWMA_Init();
           EA = 1;
    while (1);
}

void TM0_Isr() interrupt 1
{
        if(ci)
        {
                Cyc--;
                if(Cyc<1)
                        ci=0;
        }
        else
        {
                Cyc++;
                if(Cyc>8)
                        ci=1;
        }
        PWMA_ARR = 580+Cyc;                        //设置周期时间
        PWMA_CCR2 = PWMA_ARR/2;                //设置占空比时间
PMW互补输出,运行几百毫秒会不定时出现约2.7毫秒中断。请大神帮指点是哪里出了问题?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-4-1 15:35:47 来自手机 | 显示全部楼层
动态改变PWM频率与占空比的话,建议分别开启它们的预装载功能。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-29 11:51:36

1

主题

2

回帖

59

积分

注册会员

积分
59
发表于 2024-4-1 15:57:53 | 显示全部楼层
能在我的程序中更改吗?万分感谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-4-1 17:18:37 | 显示全部楼层
hold*** 发表于 2024-4-1 15:57
能在我的程序中更改吗?万分感谢!
  1.     PWMA_CCER1 = 0x00;                        //写CCMRx前必须先清零CCERx关闭通道
  2.     PWMA_CCMR2 = 0x60;                        //设置CC2为PWMA输出模式
  3.     PWMA_CCER1 = 0x50;                        //使能CC2通道
  4.     PWMA_CCMR2 |= 0x08;  //使能输出比较预装载
复制代码
  1.     PWMA_CR1 = 0x81;                        //开始计时,使能ARR寄存器预装载
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-29 11:51:36

1

主题

2

回帖

59

积分

注册会员

积分
59
发表于 2024-4-1 19:04:30 | 显示全部楼层
问题已解决,谢谢!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:20 , Processed in 0.123539 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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