holdluck 发表于 2024-4-1 14:46:47

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

#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毫秒中断。请大神帮指点是哪里出了问题?

乘风飞扬 发表于 2024-4-1 15:35:47

动态改变PWM频率与占空比的话,建议分别开启它们的预装载功能。

holdluck 发表于 2024-4-1 15:57:53

能在我的程序中更改吗?万分感谢!

乘风飞扬 发表于 2024-4-1 17:18:37

holdluck 发表于 2024-4-1 15:57
能在我的程序中更改吗?万分感谢!

    PWMA_CCER1 = 0x00;                        //写CCMRx前必须先清零CCERx关闭通道
    PWMA_CCMR2 = 0x60;                        //设置CC2为PWMA输出模式
    PWMA_CCER1 = 0x50;                        //使能CC2通道
    PWMA_CCMR2 |= 0x08;//使能输出比较预装载
    PWMA_CR1 = 0x81;                        //开始计时,使能ARR寄存器预装载

holdluck 发表于 2024-4-1 19:04:30

问题已解决,谢谢!
页: [1]
查看完整版本: PWM变频程序会中断 | 已解决