STC12C5A60S2输出50hz的pwm,控制舵机,请看一下哪里有问题
时间:10-02
整理:3721RD
点击:
#include<STC12C5A.h>
void PWM_init(void)
{
CMOD=0x04;//pca模式设置,设置pwm频率
CL=0;//*******************************************************************
CH=0;
CCAPM0=0x42;//设置pca工作方式位pwm模式(0100 0010)
CCAP0L=0x00;//pwm0初始值为0
CCAP0H=0x00;
CR=1;//启动定时器
//也可以增加设置pwm1,pwm2...
}
void PWM_set(unsigned char a)//参数0x00~0xff,也可以用0~256
{
CCAP0L=a;//设置值写入CCAP0L
CCAP0H=a;//设置值写入CCAP0H
}
void time0(void)
{
AUXR=0x80; //定时器时钟12T模式
TMOD=0x02; //设置定时器模式
TL0 = 217; //设置定时初值//*************************************************
TH0 = 217; //设置定时初值
// TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
WAKE_CLKO = 0x01; //enable timer0 clock output
}
void main()
{
PWM_init();
time0();
PWM_set(19);
}
void PWM_init(void)
{
CMOD=0x04;//pca模式设置,设置pwm频率
CL=0;//*******************************************************************
CH=0;
CCAPM0=0x42;//设置pca工作方式位pwm模式(0100 0010)
CCAP0L=0x00;//pwm0初始值为0
CCAP0H=0x00;
CR=1;//启动定时器
//也可以增加设置pwm1,pwm2...
}
void PWM_set(unsigned char a)//参数0x00~0xff,也可以用0~256
{
CCAP0L=a;//设置值写入CCAP0L
CCAP0H=a;//设置值写入CCAP0H
}
void time0(void)
{
AUXR=0x80; //定时器时钟12T模式
TMOD=0x02; //设置定时器模式
TL0 = 217; //设置定时初值//*************************************************
TH0 = 217; //设置定时初值
// TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
WAKE_CLKO = 0x01; //enable timer0 clock output
}
void main()
{
PWM_init();
time0();
PWM_set(19);
}
目测最起码你的main函数里没有while(1)
高
没有while(1),也没有系统时钟初始化啊
单片机,没用过,其他的问题,暂时不知道
最好的方法就是看芯片手册,里面一般会有参考代码,普通51有中断允许寄存器,建议看看这个芯片是不是也有而你漏掉了
我没有要循环的东西,有没有while(1)应该影响不大
手册没有我看过了
你不认为没有的话会一直在反复的执行那几个函数吗?就会一直在那里设定那些参数,你的定制器还能起作用?
每个人都在忙,要么忙着活,要么忙着死,只有这两种选择。
小编解决了吗?
定时器0溢出,你咋处理的?50Hz怎么得到的呢?