21ic电子技术开发论坛 单片机与嵌入式系统 侃单片机论坛 怎么调节STC5A60S2自带PWM的频率
发新帖我要提问
返回列表
打印

怎么调节STC5A60S2自带PWM的频率

[复制链接]
8918|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newkiwi|  楼主 | 2012-4-27 21:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
rt,看手册不是很清楚啊
#include<STC12C5A60S2.H> //头文件
/*********************************************************************************************
函数名:PWM初始化函数
调  用:PWM_init();
参  数:无
返回值:无
结  果:将PCA初始化为PWM模式,初始占空比为0
备  注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
/**************************************************/
void PWM_init (void){
    CMOD=0x02; //设置PCA定时器
  CL=0x00;
  CH=0x00;
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
  CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
  CCAP0H=0x00; // PWM0初始时为0
//CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
//CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
  //CCAP1H=0x00; // PWM1初始时为0
//CCAPM2=0x42; //PWM2设置PCA工作方式为PWM方式
//CCAP2L=0x00; //设置PWM2初始值与CCAP0H相同
  //CCAP2H=0x00; // PWM2初始时为0
//CCAPM3=0x42; //PWM3设置PCA工作方式为PWM方式
//CCAP3L=0x00; //设置PWM3初始值与CCAP0H相同
  //CCAP3H=0x00; // PWM3初始时为0
  CR=1; //启动PCA定时器
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:PWM0占空比设置函数
调  用:PWM0_set();
参  数:0x00~0xFF(亦可用0~255)
返回值:无
结  果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备  注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
void PWM0_set (unsigned char a){
CCAP0L= a; //设置值直接写入CCAP0L
  CCAP0H= a; //设置值直接写入CCAP0H
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:主函数
/*****************************************************/
void main (void){
PWM_init(); //PWM初始化
PWM0_set(0x10); //设置PWM占空比
while(1){
  //无限循环程序
}
}

相关帖子

沙发
newkiwi|  楼主 | 2012-4-27 21:22 | 只看该作者
CL=0x00;
  CH=0x00;

CCAP0L=0x00;
  CCAP0H=0x00;
这两句是?

使用特权

评论回复
板凳
logokfu| | 2012-4-27 21:36 | 只看该作者
本帖最后由 **kfu 于 2012-4-27 22:23 编辑

LZ程序写的丑啊,看着有点费劲。

给你一个我写的程序。

该程序输出两路频率相同,占空比可以通过按键独立调节的两路PWM波
注意:程序中 K1和K2 ,K3和K4分别控制着这两路 PWM波的占空比的增大和减小。
PWM输出管脚为 P1.3和P1.4
完整工程在此 C51PWM.rar (26.8 KB) ,已经编译通过了,示波器验证过了。


#include <reg51.h>
#define BYTE unsigned char
#define WORD unsigned int
sfr  CCON=0XD8;
sbit CR =CCON^6;
sfr CMOD= 0XD9;
sfr CCAPM0 =0XDA;
sfr CCAP0H=0XFA;
sfr CCAPM1=0XDB;
sfr CCAP1H=0XFB;
sfr AUXR1=0XA2;
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
WORD i=0;
void delay(WORD t)
{
for(i=0;i<t;i++) ;
}
int main()
{
CR=1;
CMOD=0X08;
CCAPM0=0X42;
CCAPM1=0X42;
CCAP0H=128; //这个是设置通道0的占空比的。由于是8位PWM,所以取值范围只能是0~255,这里写128,也就是说129/256的占空比。
CCAP1H=25;  //这个是设置通道1的占空比的。由于是8位PWM,所以取值范围只能是0~255,这里写25,也就是说26/256的占空比。

P2=0;
AUXR1=0X00;
while(1)
{
  if(1==K1)
  {
   delay(5000);   
   delay(5000);
   if(1==K1)
   {
    if(255==CCAP0H)
    CCAP0H=0;
    else
    CCAP0H++;
    K3=K4=0;
   }
  }  
  if(1==K2)
  {
   delay(5000);  
   delay(5000);
   if(1==K2)
   {
    if(0==CCAP0H)
    CCAP0H=255;
    else
    CCAP0H--;
    K3=K4=0;
   }
  }
  if(1==K3)
  {
   delay(5000);   
   delay(5000);
   if(1==K3)
   {
    if(255==CCAP1H)
    CCAP1H=0;
    else
    CCAP1H++;
   }
  }
  if(1==K4)
  {
   delay(5000);  
   delay(5000);
   if(1==K4)
   {
    if(0==CCAP1H)
    CCAP1H=255;
    else
    CCAP1H--;
   }
  }
}
}

使用特权

评论回复
地板
logokfu| | 2012-4-27 21:41 | 只看该作者
本帖最后由 **kfu 于 2012-4-27 21:43 编辑

抱歉,LZ是要改变频率是吧,没看清要求,只需改变PCA时钟源频率就好了,手册上是这么说的,你自己试试吧。

使用特权

评论回复
5
logokfu| | 2012-4-27 21:45 | 只看该作者

使用特权

评论回复
6
logokfu| | 2012-4-27 21:49 | 只看该作者
CL=0x00;
  CH=0x00;

CCAP0L=0x00;
  CCAP0H=0x00;
这两句是?
newkiwi 发表于 2012-4-27 21:22


CCP0H是控制占空比的。和频率没关系

使用特权

评论回复
7
coody| | 2012-4-28 10:36 | 只看该作者
使用Timer0做PCA时钟,就可以改变频率

使用特权

评论回复
8
autopccopy| | 2012-4-28 12:57 | 只看该作者

,

学习,mark!

使用特权

评论回复
9
newkiwi|  楼主 | 2012-4-30 11:16 | 只看该作者
6# **kfu
已经搞懂了,谢谢啊

使用特权

评论回复
10
fenglife| | 2012-8-1 15:44 | 只看该作者
学习,MARK

使用特权

评论回复
11
fx874274917| | 2013-3-20 15:49 | 只看该作者
楼主能指点下吗?是不是必须要Timer0啊?

使用特权

评论回复
12
安燕| | 2013-5-11 14:06 | 只看该作者
请问楼主,问题解决了没?我现在也需要用STC12C5A60S2单片机产生一个40KHz的方波,我不懂SYSclk要怎么写入?

使用特权

评论回复
13
水门王| | 2013-7-20 14:20 | 只看该作者
我也是再找这个问题。写写啊

使用特权

评论回复
14
ssknwssknw| | 2013-12-28 09:46 | 只看该作者
请问,PWM开启后如何关闭,用CR=0关不了。怎么办啊

使用特权

评论回复
15
husiyangno100| | 2015-3-4 14:41 | 只看该作者
**kfu 发表于 2012-4-27 21:49
CCP0H是控制占空比的。和频率没关系

大哥,用你的工程,波形出不来啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:No road of flower leads to glory.

0

主题

52

帖子

0

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部