- 打卡等级:初来乍到
- 打卡总天数:8
- 最近打卡:2026-04-23 14:03:48
已绑定手机
注册会员
- 积分
- 52
|
下面这段代码,只能输出p2.2到p2.5的引脚波形,p2.6和p2.7只能输出高电平,没有波形,另外是内部时钟PLL。看下设置对吗?如果错了,应该怎么改?
#include "ai8051u.h"
#define PWM_PERIOD 1999 //周期
#define PWM_Duty 600 //占空比
#define PWM_Duty1 500
#define PWM_Duty2 400
#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)
{
}
}
|
|