找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6725|回复: 3
收起左侧

关于STC15W408AS单片机中的PWM引脚使用方法问题求教

[复制链接]
ID:710522 发表于 2020-4-26 22:46 | 显示全部楼层 |阅读模式
STC15W408AS这款单片机,我看了一下他们的资料,
看到这款单片机引脚有些是自带PWM脉冲功能的。
这种有PWM的引脚,是不是可以直接就能输出脉冲。
比如,我想做PWM无极调光呼吸灯,亮起来,灭下去。

我以前用89C52做呼吸灯程序时个,是用定时0的中断来实现的。感觉有时会影响到其他程序的运行,补其他外部中断0,中断时候,会明显抖一下。

现在我的问题是:这款15W408AS自带PWM引脚,应该怎么使用。是不是不会占用我其他程序的执行时间?
有没相关的例程,请分享一下,我想学习研究。谢谢各位。
回复

使用道具 举报

ID:548551 发表于 2020-4-27 00:35 来自手机 | 显示全部楼层
呼吸灯的程序直接软件模拟就可以了。没有必要pwm 。
回复

使用道具 举报

ID:213173 发表于 2020-4-27 06:22 | 显示全部楼层
STC15W408AS内置硬件PWM,正常运行不占用CPU资源,控制CCAP0H寄存器预装值0x00~0xff就能控制占空比。呼吸灯示例程序
  1. #include <STC15F2K60S2.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. //sbit key1=P4^2;       
  5. //sbit key2=P4^4;       
  6. //sbit LED=P1^0;
  7. uchar num=0x00; //占空比变量
  8. bit a=0;                //呼吸位变量
  9. uint b;                        //延时计数变量

  10. void PWM_Init()
  11. {
  12.     CCON = 0;                       //初始化PCA控制寄存器
  13.                                     //PCA定时器停止
  14.                                     //清除CF标志
  15.                                     //清除模块中断标志
  16.     CL = 0;                         //复位PCA寄存器
  17.     CH = 0;
  18.         CMOD = 0x02;                    //设置PCA时钟源,PWM频率=12MHZ/2/256=23.4375KHZ
  19.                                                     //PWM频率=11.0592MHZ/2/256=21.600KHZ
  20.     PCA_PWM0 = 0x00;                //PCA模块0工作于8位PWM
  21.     CCAP0H = CCAP0L = 0xff;         //PWM0的占空比为0%(0x00=100%)
  22.     CCAPM0 = 0x42;                  //PCA模块0为8位PWM模式
  23.     CR = 1;                         //PCA定时器开始工作
  24. }

  25. void scan()
  26. {
  27.         static uint count1=0,count2=0;       
  28.         if(a==0)
  29.         {
  30.                 count1++;
  31.                 if(count1>=2000)
  32.                 {                       
  33.                         count1=0;
  34.                         if(num<0xff)
  35.                         {
  36.                                 num++;
  37.                                 if(num==0xff)
  38.                                 {
  39.                                         a=1;
  40.                                         b=5000;
  41.                                         while(b--);
  42.                                 }
  43.                         }
  44.                 }
  45.         }
  46.         else
  47.         {
  48.                 count2++;
  49.                 if(count2>=2000)
  50.                 {                       
  51.                         count2=0;
  52.                         if(num>0)
  53.                         {
  54.                                 num--;
  55.                                 if(num==0)
  56.                                 {
  57.                                         a=0;
  58.                                         b=5000;
  59.                                         while(b--);
  60.                                 }
  61.                         }
  62.                 }
  63.         }
  64. }

  65. void main()
  66. {
  67.         P1M0 = 0x01;                        //P1.0端口推挽输出模式
  68.         P1M1 = 0x00;
  69.         PWM_Init();                                //初始化PWM
  70.         while(1)
  71.         {
  72.                 scan();                                //呼吸扫描
  73.                 CCAP0H=num;                        //P1.0输出PWM
  74.         }
  75. }
复制代码




回复

使用道具 举报

ID:316880 发表于 2020-4-27 11:12 | 显示全部楼层
如果你是从89C52过度到STC15W408AS,怎么也要学习1个月以上才能掌握。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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