代码编写的错误请老师看下
下面这段代码,只能输出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)
{
}
}
PWMA_ENO 没有覆盖4P
参考32G例程,注意功能脚切换那里不同:
老师,那内部pll设置呢?
pwma_eno = 0x3f,是2和3通道,如何输出4通道 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]