打印

stc2052ad单片机的pwm信号的疑问。

[复制链接]
2627|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
还我今生|  楼主 | 2008-7-22 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stc2052.h"
unsigned int pulse_width = 0x80;       //用与占空比赋值
unsigned int i,j;
void PCAinit();                         //PCA模块初始化
void delay1ms(unsigned int TIME);       //1ms延时程序(大概是1ms)
void zhankongbi();                      //调节占空比
void st();                              //用来表示pulse_width的状态函数

void main(void)
{
    EA=0;
    PCAinit();            //初始化PCA定时器
    zhankongbi();
}

void PCAinit()
{
    CMOD=0x80;            //PCA 在空闲模式下停止 PCA 计数器工作
                          //PCA 时钟模式为fosc/12
                          //禁止 PCA 计数器溢出中断
    CCON=0x00;            //禁止 PCA 计数器工作, 清除中断标志、计数器溢出标志
    CL=0x00;              //计数器初值 频率3.9k 
    CH=0x00;              //
//下面设置模块0为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.7(第11脚)输出
    CCAPM0=0x42;          //PCA(计数器阵列)模块0的工作模式 :8位PWM工作模式
    PCA_PWM0=0x00;        //赋值为0,pwm才能有高电平输出

    EPCA=1;                // 开 PCA 中断
    EA =1;                 // 开总中断
    CR=1;                 //将PCA 计数器打开
}
void zhankongbi()
{    CCAP0H=pulse_width;  // 模块0站空比的比较值
    while(1){
       delay1ms(2); 
       CR = ~CR;
       if(CR==0)
       PCA_PWM0=0x03;
       else
       PCA_PWM0=0x00;  
             }
                
    
    
}
                              
void delay1ms(unsigned int TIME)
{
    for(i=0;i<TIME;i++)
        for(j=0;j<400;j++)
        {;}    
}

相关帖子

沙发
还我今生|  楼主 | 2008-7-22 15:26 | 只看该作者

请问我可以通过改变CL,CH的值来改变pwm的频率吗

比如我想改成38.4k,
我这样改 
CL=0xE6;              //计数器初值 
CH=0xE6; 
为什么频率还是不改变呢?
请高手指点。


                

使用特权

评论回复
板凳
还我今生|  楼主 | 2008-7-23 08:57 | 只看该作者

补充用得是12M晶振

使用特权

评论回复
地板
lyjian| | 2008-7-23 18:22 | 只看该作者

stc2052ad的pwm的频率改变不了

除非你改变PWM定时器的输入时钟的频率

使用特权

评论回复
5
还我今生|  楼主 | 2008-7-24 08:34 | 只看该作者

这样的话

CL=0x00;
CH=0x00;                  
那这两句根本不需要落。

使用特权

评论回复
6
osesemi| | 2012-1-5 17:03 | 只看该作者
路过,学习一下

使用特权

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

本版积分规则

218

主题

1382

帖子

1

粉丝