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毫秒中断。请大神帮指点是哪里出了问题?
动态改变PWM频率与占空比的话,建议分别开启它们的预装载功能。 能在我的程序中更改吗?万分感谢! 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寄存器预装载 问题已解决,谢谢!
页:
[1]