als 发表于 2026-4-22 11:26:26

代码编写的错误请老师看下

下面这段代码,只能输出p2.2到p2.5的引脚波形,p2.6和p2.7只能输出高电平,没有波形,另外是内部时钟PLL。看下设置对吗?如果错了,应该怎么改?
#include "ai8051u.h"
#define PWM_PERIOD 1999 //周期
#define PWM_Duty600//占空比
#define PWM_Duty1500
#define PWM_Duty2400
#define MAIN_Fosc 120000000L//频率
typedef unsigned char u8;
void PWMA_Init(void)
{               
                PWMA_PSCRH = 0;
                PWMA_PSCRL = 0; //时钟1分频
                PWMA_DTR = 12;   //死期时间配置
                PWMA_ARRH = (u8)(PWM_PERIOD >>8); //周期时间
                PWMA_ARRL = (u8)(PWM_PERIOD);
       
          PWMA_CCR1H = (u8)(PWM_Duty>>8);//占空比设置
                PWMA_CCR1L = (u8)(PWM_Duty);
                PWMA_CCR2H = (u8)(PWM_Duty1>>8);
                PWMA_CCR2L = (u8)(PWM_Duty1);
                PWMA_CCR3H = (u8)(PWM_Duty2>>8);
                PWMA_CCR3L = (u8)(PWM_Duty2);
                PWMA_ENO = 0X00;
                PWMA_CCER1 = 0X00;
          PWMA_CCER2 = 0X00;
                PWMA_CCMR1 = 0;
    PWMA_CCMR2 = 0;
    PWMA_CCMR3 = 0;
    PWMA_CCMR1 = 0X68;
    PWMA_CCMR2 = 0X68;
    PWMA_CCMR3 = 0X68;
                PWMA_PS = 0X00;
    PWMA_PS =(2<<2)+(2<<4)+(2<<6);
    PWMA_CCER1 = 0X55;
                PWMA_CCER2 = 0X05;   //这里改成0x55也没用
    PWMA_ENO |= 0X3F;
    PWMA_BKR = 0X80;    //使能主输出
    PWMA_SR1 = 0X00;    //使能中断
    PWMA_IER |= 0X01;    //使能中断更新
    PWMA_CR1 |= 0X01;   //启动计数器
               
}
//unsigned int u,v,w;
void main(void)
{
          EAXFR = 1;                  
    WTST = 0;                                                         
    CKCON = 0;                  
    P2M0 |= 0xfc; P2M1 &= ~0xfc;
                PWMA_Init();
                CLKDIV = 0X01;
                CLKSEL = 0X03;
                while(!(CLKSEL & 0X80));
       
                EA = 1;
               while(1)
                {
                }
}

ercircle 发表于 2026-4-22 16:20:34

PWMA_ENO 没有覆盖4P


参考32G例程,注意功能脚切换那里不同:

als 发表于 2026-4-22 16:29:34

老师,那内部pll设置呢?

als 发表于 2026-4-23 14:03:48

pwma_eno = 0x3f,是2和3通道,如何输出4通道

als 发表于 2026-4-23 14:54:39

ercircle 发表于 2026-4-22 16:20
PWMA_ENO 没有覆盖4P




老师,那那内部PLL设置呢?不同频率的PLL输出怎么设置.另外你发的示例程序我看了。通道是分散设置的,我统一设置通道输出,该怎么覆盖4通道。PWMA_ENO=0X3F;是2和3通道,4通道我用PWMA_ENO= 0XC0;还是不对,4通道该怎么设置呢,老师教教我。主要就是内部PLL时钟不同频率设置和4通道pwma_eno设置
页: [1]
查看完整版本: 代码编写的错误请老师看下