单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 79|回复: 5
打印 上一主题 下一主题
收起左侧

stc15w4k32单片机pwm程序求教

[复制链接]
跳转到指定楼层
楼主
kissme 发表于 2019-1-12 20:08 来自手机 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
单片机stc15w4k32.有自带pwm模块。看数据手册写下如下渐亮灯程序。。下载后木有反应。。把知道哪错了。。拜托大神指教。。。谢谢

mmexport1547294737523.jpg (1.6 MB, 下载次数: 0)

mmexport1547294737523.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

6#
 楼主| kissme 发表于 2019-1-16 11:04 来自手机 | 只看该作者
wulin 发表于 2019-1-13 20:10
上面的程序就是用STC15W404AS自带PWM模块的示例程序

上面的程序好像有点问题,循环语句。。。while(b--)位置应该不对。。
回复

使用道具 举报

5#
 楼主| kissme 发表于 2019-1-14 07:04 来自手机 | 只看该作者
wulin 发表于 2019-1-13 20:10
上面的程序就是用STC15W404AS自带PWM模块的示例程序

哦哦。。我的意思是连pca计数器都不用。。。直接用pwm模块的计数器。。。。。。谢谢耐心回答。。。。
回复

使用道具 举报

地板
wulin 发表于 2019-1-13 20:10 | 只看该作者
kissme 发表于 2019-1-13 17:04
谢谢你。。。如果有单片机自带的pwm模块输出pwm波的程序。。希望能拜读。。。

上面的程序就是用STC15W404AS自带PWM模块的示例程序
回复

使用道具 举报

板凳
 楼主| kissme 发表于 2019-1-13 17:04 来自手机 | 只看该作者
wulin 发表于 2019-1-13 08:13
特殊功能寄存器的配置通常用字节设置,多数不支持位操作。
给你一个PWM呼吸灯示例参考,MCU型号15W404AS, ...

谢谢你。。。如果有单片机自带的pwm模块输出pwm波的程序。。希望能拜读。。。
回复

使用道具 举报

沙发
wulin 发表于 2019-1-13 08:13 | 只看该作者
本帖最后由 wulin 于 2019-1-13 10:21 编辑

特殊功能寄存器的配置通常用字节设置,多数不支持位操作。
给你一个PWM呼吸灯示例参考,MCU型号15W404AS,按默认CCP0输出端P1.1。注意特殊功能寄存器的配置与STC15W4K32有所区别。
#include <STC15F2K60S2.H>//15系列头文件
#define uint unsigned int
#define uchar unsigned char
//sbit key1=P4^2;        
//sbit key2=P4^4;        
sbit LED=P1^0;
uchar num=0x00;
bit a=0;
uint b;
void PWM_Init()
{
        CCON = 0;                        //初始化PCA控制寄存器
                                                                                                //PCA定时器停止
                                                                                                //清除CF标志
                                                                                                //清除模块中断标志
        CL = 0;                          //复位PCA寄存器
        CH = 0;
        CMOD = 0x02;                     //设置PCA时钟源,PWM频率=12MHZ/2/256=23.4375KHZ
                                                                                                //PWM频率=11.0592MHZ/2/256=21.600KHZ
        PCA_PWM0 = 0x00;                 //PCA模块0工作于8位PWM
        CCAP0H = CCAP0L = 0xff;          //PWM0的初始占空比为100%
        CCAPM0 = 0x42;                   //PCA模块0为8位PWM模式
        CR = 1;                          //PCA定时器开始工作
}
void scan()
{
        static uint count1=0,count2=0;        
        if(a==0)
        {
                count1++;
                if(count1>=2000)
                {                        
                        count1=0;
                        if(num<0xff)
                        {
                                num++;
                                if(num==0xff)
                                {
                                        a=1;
                                        b=5000;
                                        while(b--);
                                }
                        }
                }
        }
        else
        {
                count2++;
                if(count2>=2000)
                {                        
                        count2=0;
                        if(num>0)
                        {
                                num--;
                                if(num==0)
                                {
                                        a=0;
                                        b=5000;
                                        while(b--);
                                }
                        }
                }
        }
}

void main()
{
        P1M0 = 0x02;                        //P1.1推挽输出
        P1M1 = 0x00;                        //P1.1推挽输出
        PWM_Init();
        while(1)
        {
                scan();
                CCAP0H=num;
        }
}
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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