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

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

[复制链接]

该用户从未签到

1

主题

2

回帖

15

积分

新手上路

积分
15
发表于 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毫秒中断。请大神帮指点是哪里出了问题?

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 09:56
  • 签到天数: 130 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4029

    积分

    论坛元老

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

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    回帖

    15

    积分

    新手上路

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:56
  • 签到天数: 130 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4029

    积分

    论坛元老

    积分
    4029
    发表于 2024-4-1 17:18:37 | 显示全部楼层
    holdluck 发表于 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

    主题

    2

    回帖

    15

    积分

    新手上路

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 07:24 , Processed in 0.059758 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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