这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【STCAi8051U】Ai8051U的可编程计数器例程-生成PWM

共1条 1/1 1 跳转至

【STCAi8051U】Ai8051U的可编程计数器例程-生成PWM

专家
2026-02-11 18:05:26     打赏

使用可编程计数器例程阵列(PCA)输出PWM,涉及到以下几个寄存器:

CCAPMn(n = 0,1,2)

PCA_PWMn(n = 0,1,2)

CCAPnL(n = 0,1,2)

CCAPnH(n = 0,1,2)

测试代码如下:


// 测试工作频率为 12MHz
#include "Ai8051U.H"
#include "intrins.h"
void main(void) {
    EAXFR = 1;  // 允许访问扩展的特殊寄存器, XFR
    //(32 位模式请使用这句,注释下一句 )
    //  P_SW2 |= 0x80;  // 允许访问扩展的特殊寄存器, XFR
    //(8 位模式请使用这句,注释上一句 )
    WTST = 0; // 设置取程序代码等待时间,
    // 赋值为 0 表示不等待,程序以最快速度运行
    CKCON = 0; // 设置访问片内的 xdata 速度,
    // 赋值为 0 表示用最快速度访问,不增加额外的等待时间
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    CCON = 0x00;
    // B7 = 0          :空闲模式下 PCA 继续计数
    // B6 - B5(CCP_S) = 00 :ECI-P1.2 、 CCP0 - P1.3、 CCP1 - P1.4、CCP2 - P1.1
    // B4 - B1(CPS) = 0000 :系统主频/12,即PCA主频为1MHz
    // B= 0           :禁止 PCA 计数器溢出中断
    CMOD = 0x00;
    // 计数器清零
    CL = 0x00;
    CH = 0x00;
    
    // -- 6 位 PWM --
    // B6(ECOM0) = 1 :允许PCA0的比较功能
    // B5(CCAPP0) = 0:禁止PCA0上升沿捕捉
    // B4(CCAPN0) = 0:禁止PCA0下降沿捕捉
    // B3(MAT0) = 0  :禁止PCA0匹配
    // B2(TOG0) = 0  :禁止PCA0高速脉冲输出
    // B1(PWM0) = 1  :允许PCA0输出PWM
    // B0(EXXF0) = 0 :禁止PCA0匹配/捕获中断
    CCAPM0 = 0x42;    //模式控制 : PCA 模块 0 为 PWM 工作模式
    
    // B7-B6(EBS0) = 10 :6 位 PWM模式
    PCA_PWM0 = 0x80;  //PCA 模块 0 输出 6 位 PWM
    
    // 模式捕获值/器 比较值
    // 6 位模式下,最大值0x3F,溢出值=0x40
    CCAP0L = 0x20;    //PWM 占空比为 50%[(40H-20H)/40H]
    CCAP0H = 0x20;
    
    // -- 7 位 PWM --
    CCAPM1 = 0x42;  //PCA 模块 1 为 PWM 工作模式
    PCA_PWM1 = 0x40;  //PCA 模块 1 输出 7 位 PWM
    // 7 位模式下,最大值0x7F,溢出值=0x80
    CCAP1L = 0x20;  //PWM 占空比为 75%[(80H-20H)/80H]
    CCAP1H = 0x20;
    
 
    // -- 10 位 PWM --
    CCAPM2 = 0x42;  //PCA 模块 2 为 PWM 工作模式
    PCA_PWM2 = 0xc0;  //PCA 模块 2 输出 10 位 PWM
    // 10位模式下,最大值0x3FF,溢出值=0x400
    CCAP2L = 0x20;  //PWM 占空比为 96.875%[(400H-20H)/400H]
    CCAP2H = 0x20;
    
    CCON |= 0x40;  // 启动 PCA 计时器
    while (1);
}

烧录芯片时,确定要使用12MHz主频。

 CMOD = 0x00;,所以PWM输出使用的是P1.1、P1.3、P1.4

图片1.png


P1.1输出

987.862 / 1020 ≈96.85%,与预想的96.875%差不多


P1.3的输出:

31.703 / 63.406 = 50%,符合预期


P1.4的输出:

95.743/127.446≈75.12%,与预想的75%差不多








关键词: 懒猫的学习笔记     Ai8051U     可编程计数器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]