STC15W408AS单片机的PWM问题,求指教。。谢谢
时间:10-02
整理:3721RD
点击:
程序思想:中能对PCA模块0的CCAP0L和CCAP0H寄存器多次赋初值,来实现PWM占空比可调,这样的方法能行通吗?求大神指点。
#include<PWM.h>
unsigned char code PWM[8]={0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x00};//设置PWM占空比数组; 当CCAP0H的值为255时,理论上占空比应该为0
void pwm_init()
{
CL=0x00;
CH=0x00;
//省略PCA_PWM0=0x00;PCA模块0的PWM工作于8位PWM
}
void pwm_set(unsigned char a)
{
CCAP0L= a; //设置值直接写入CCAP0L
CCAP0H= a; //设置值直接写入CCAP0H
CCAPM0=0x42;//PWM0设置PCA工作方式为PWM方式,无PCA中断
CR=1;
}
void main(void)
{
pwm_init();//PWM初始化
CMOD=0x02;//择PCA输入时钟源 CPS2 CPS1 CPS0,无中断使能
//pwm_set(0xff);//设置PWM占空比为0,全低电平。NMOS管不导通
while(1)
{
if(x<ADget<y)//while(x<ADget<y)具体再选择
{
pwm_init();
pwm_set(PWM[0])
//delay();
}
if(x<ADget<y)
{
pwm_init();
pwm_set(PWM[1]);
//delay();
}
}
}
#include<PWM.h>
unsigned char code PWM[8]={0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x00};//设置PWM占空比数组; 当CCAP0H的值为255时,理论上占空比应该为0
void pwm_init()
{
CL=0x00;
CH=0x00;
//省略PCA_PWM0=0x00;PCA模块0的PWM工作于8位PWM
}
void pwm_set(unsigned char a)
{
CCAP0L= a; //设置值直接写入CCAP0L
CCAP0H= a; //设置值直接写入CCAP0H
CCAPM0=0x42;//PWM0设置PCA工作方式为PWM方式,无PCA中断
CR=1;
}
void main(void)
{
pwm_init();//PWM初始化
CMOD=0x02;//择PCA输入时钟源 CPS2 CPS1 CPS0,无中断使能
//pwm_set(0xff);//设置PWM占空比为0,全低电平。NMOS管不导通
while(1)
{
if(x<ADget<y)//while(x<ADget<y)具体再选择
{
pwm_init();
pwm_set(PWM[0])
//delay();
}
if(x<ADget<y)
{
pwm_init();
pwm_set(PWM[1]);
//delay();
}
}
}
本人没啥积分,,望各位赐教。程序有问题吗
应该可以的,我做过一个变PWM的项目,但是要求设置PWM在一个周期结束的时候更新占空比,就是使用影子寄存器,而不是直接立即更新的方式,看看芯片手册,了解是否支持,如果不支持,那么在跟新占空比的时候可能不是很平滑
影子寄存器,,是什么意思啊?是定义的中间变量吗?
有的芯片是有影子寄存器的,相当于一个中间变量,但是有控制位可以控制使用
能加一下QQ吗?赐教一下,,1319441689。我冒失没见到手册上有影子寄存器。还有一个问题就是怎样更新占空比呢,,我把CL.CH直0算不算呢,,,谢谢拉
你用的芯片型号是什么?
宏晶STC15W401AS单片机,我看了看手册,,没看到影子![qq]1319441689[/qq]
小编现在程序怎么样了。
小编喔加你一下qq问一下这款芯片的pwm配置问题,,嘿嘿谢谢哈
貌似好久没来逛了,,,手册是最好的教科书,看懂手册了基本上就差不多了
PCA用于PWM模块,就是通过改变CCAP0L和CCAP0H寄存器的值来实现调光!
回头来看看走来时的程序,发现这个程序思想差的太远了,程序需要多写多改。实际动手就会发现忽略了很多问题,AD转换不稳定、if(x<ADget<y)判断调光方式不可取、闪烁、平滑、最低亮度、程序过长后的可靠性、执行一条线的流程(中断应避免太长)!
能发我一份手册吗?谢谢!wanmeizy@foxmail.com
