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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2026-04-23 14:03:48
已绑定手机

2

主题

15

回帖

52

积分

注册会员

积分
52
发表于 2026-4-22 11:26:26 | 显示全部楼层 |阅读模式
下面这段代码,只能输出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)
                {
                }
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:521
  • 最近打卡:2026-04-30 08:53:57
已绑定手机

106

主题

4345

回帖

9748

积分

荣誉版主

无情的代码机器

积分
9748
发表于 2026-4-22 16:20:34 | 显示全部楼层
PWMA_ENO 没有覆盖4P


参考32G例程,注意功能脚切换那里不同:
STC32G-高级PWM相关程序.rar (1.03 MB, 下载次数: 2)
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2026-04-23 14:03:48
已绑定手机

2

主题

15

回帖

52

积分

注册会员

积分
52
发表于 2026-4-22 16:29:34 | 显示全部楼层
老师,那内部pll设置呢?
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2026-04-23 14:03:48
已绑定手机

2

主题

15

回帖

52

积分

注册会员

积分
52
发表于 2026-4-23 14:03:48 | 显示全部楼层
pwma_eno = 0x3f,是2和3通道,如何输出4通道
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2026-04-23 14:03:48
已绑定手机

2

主题

15

回帖

52

积分

注册会员

积分
52
发表于 2026-4-23 14:54:39 | 显示全部楼层
erci*** 发表于 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设置
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-5-1 10:30 , Processed in 0.115025 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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