51单片机:PCA模块的PWM模式

1、PWM功能引脚切换

 2、配置PCA控制寄存器

 3、配置PCA模式寄存器,选择时钟源

 4、计数寄存器清零

5、配置PCA模块模式模式控制寄存器

6、配置PCA模块PWM模式控制寄存器

7、配置比较值

8、控制寄存器配置CR开始计数

以6位PWM为例

计数值CL[5:0]与CCAPnL[5:0]比较,小于输出低电平,大于等于输出高电平,CL值溢出后,重载值从CCAPnH载入CCAPnL,所以修改占空比修改CCAPnH值,6位PWM周期0x40

 

 呼吸灯实例:

#include <STC8G.H>
 sbit LED1 = P3^7;
int dir = 0;
int cnt = 0;
 
void Delay(unsigned int xms)
{
    unsigned char i,j;
    while(xms)
    {
        i = 15;
        j = 90;
            do
            {
                while(--j);
            }
        while(--i);
            xms--;
    }
}



void main(void)
{    
    
    P3M0 = 0xff; // 将P3配置为推挽输出
    P3M1 = 0x00;
    
    P1M0 = 0xff; // 将P1口配置为推挽输出
    P1M1 = 0x00;
    
    P_SW1 |= 0X01 << 4;
    CCON=0x00;//停止PCA计数
    CMOD=0x08;//PCA计数脉冲设为定时器0的溢出脉冲
    CL= 0x00;
    CH= 0x00;

    CCAPM1=0x42;
    PCA_PWM1=0x80;
    CCAP1L=0x3f;//PWM占空比(40H-38H)/40H
    CCAP1H=0x3f;//溢出时自动填装到CCAP0L里,实现无干扰更新
    

    CR=1;//启动PCA计数
    

    
    while(1)
    {
        if(dir)
        {
            cnt--;
            if(cnt == 0)
                dir = !dir;
        }else{
            cnt++;
            if(cnt == 0x3f)
                dir = !dir;
        }
        
        
        CCAP1H=cnt; //PWM占空比(40H-38H)/40H
//        LED1 = !LED1;
    Delay(50); //延时1s

    }
 
}

设置固定输出:

 

 

posted @ 2024-05-23 16:54  易安yan  阅读(1164)  评论(0)    收藏  举报