STC15W4K58S4 PWM波输出实验2

                PWM实验2:带有相位延迟的PWM波

实验要求:

1.PWM波形发生器的时钟为系统时钟四分频

2.波形由通道6输出

3.周期为20个PWM时钟

4.占空比为2/3

5.有4个PWM时钟的相位延迟

生成的波形应当如下图所示:

由于要产生4个PWM时钟的相位延迟,所以,PWM4初始电平设置为低,

PWM周期为20,则PWMC=19;

低电平延迟4个PWM计数周期,所以第一次翻转门限设置为3,

占空比为2/3,所以第二次翻转门限为20*2/3=13,13+3=16。

程序代码:

//时钟频率12MHz

#include "STC15W4K.H"
#define uchar unsigned char

#define CYCLE   884    //定义PWM周期(最大值为32767)
#define WIDE    450    //定义高电平时间

sbit P1_6=P1^6;           //PWM6第一输出

void Delay500ms()                //@12.000MHz
{
        unsigned char i, j, k;

        i = 23;
        j = 205;
        k = 120;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void port_mode()            // 端口模式         将所有端口设置为准双向弱上拉
{
        P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
        P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00; 

void main()
{
  unsigned char i;

        //系统上电后,所有与PWM有关的端口都是高阻态模式,

        //所以在使用PWM前,要将端口设置为准双向弱上拉模式

       //根据实际需要,设置为强推挽也可以输出PWM波,只是一定要串上电阻1K—10K的电阻

        port_mode();//将所有端口初始化为准双向弱上拉
        
        //LED灯闪烁3次,表明系统上电工作
        for(i=0; i<3; i++)
        {
        P1_6=0;
        Delay500ms();
        P1_6=1;
        Delay500ms();
        }

         //将P_SW2寄存器的最高位置1,
         //也就是使能访问外部扩展特殊功能寄存器XSFR,而不是访问外部数据寄存器XRAM
         P_SW2|=0x80;

         //设置PWM配置寄存器
         //其他各位都为1,只有C6INI=0,也就是设置PWM6的初始输出电平为低电平
         PWMCFG&=0xEF;

         //设置PWM计数器的时钟源为 系统时钟分频,而不是定时器T2溢出,设置为系统时钟的3+1=4分频
         PWMCKS=0x03;

         //PWM计数器设置计数值,也就是设置PWM周期
         PWMC=19;        

         //第一次翻转的计数值,也就是高电平所占时间
         PWM6T1=3; 

         //第二次翻转的计数值
         PWM6T2=16;  


         //注意这个寄存器与PWMCR不同
         //PWM6第一引脚输出,即P1.6输出
         //关闭PWM6中断
         //关闭T1匹配翻转中断
         //关闭T2匹配翻转中断
         PWM6CR=0;

         //由于前面已经设置完XSFR,这里设置为禁止访问XSFR
         //也就是设置为对外部数据存储器XRAM的访问
         P_SW2&=0x0F;

         //开启总PWM 波形发生器功能,开启PWM6输出,或者说是使能也可以
         PWMCR|=0x90;
         
         while(1);
}

实际输出波形:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值