mkliop 发表于 2010-10-21 10:37:41

STC 单片机的 PWM怎么用?

12C5412AD的PWM需要配置那些寄存器? 资料很乱看不懂

flame0510 发表于 2010-10-21 20:18:45

可以直接使用定时器,软件生成PWM
   我使用时5608AD,使用的就是软件生成PWM,感觉使用它的PWM功能不是很方便,不想AVR和MSP430

chengluoran 发表于 2010-10-21 20:35:52

慢慢看就明白了。
给你一个参考:
http://www.doyoung.net/program/PWM/index.html

treeyan 发表于 2010-10-21 21:31:42

STC 的datasheet 像打广告的。。。

zzjjhh250 发表于 2010-10-22 01:17:31

要配置三个:
1.时钟源 T0 、fsys/2、fsys/12
2.配置成为PWM模式,好像有个0X42的
3。使能PWM输出

在CL到顶之前装载CH

前天用来生成标准三相SPWM波的……

maikluo 发表于 2010-11-22 20:46:03

我现正使用STC12C5608AD,跪求:用AD功能把P1.0(ADC0/CLKOUT1/P1.0)脚输入电压转过来的值,用P3.7脚(PWMO/PCA0)生成PWM输出,
我P1.0的电压随光敏电阻变化的。
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_599702SSVUSX.jpg
电路图 (原文件名:电路图.jpg)

maikluo 发表于 2010-11-22 20:53:07

我现正使用STC12C5608AD,跪求:用AD功能把P1.0(ADC0/CLKOUT1/P1.0)脚输入电压转过来的值,程式写成这样,不知怎修改,
#include "STC12C5620AD.H"
sbitVACCT=P3^5;
sbitPWM0=P3^7;
sbitSYSPOWER=P1^3;
sbitPCSW=P1^2;
sbit   Lightness=P1^0;

//---------------------------------------------------------------------
//以下选择 ADC 转换速率,只能选择其中一种
                        //          SPEED1 SPEED0A/D转换所需时间
#define AD_SPEED   0x60 //0110,0000   1      1   270个时钟周期转换一次,
                        //                         CPU工作频率27MHz时,
                        //                         A/D转换速度约100KHz
//#define AD_SPEED   0x40 //0100,0000   1      0   540个时钟周期转换一次
//#define AD_SPEED   0x20 //0010,0000   0      1   810个时钟周期转换一次
//#define AD_SPEED   0x00 //0000,0000   0      0   1080个时钟周期转换一次
//---------------------------------------------------------------------


#define uchar unsigned char
unsigned charaa,bb;
void delay(uchar dd)
{
        int x,y;
        for(x=dd;x>0;x--)
        for(y=100;y>0;y--);
}

        void PWMInitial( void )    // 初始化PWM
{
        CMOD = 0x05;    // 设置PWM的时钟源 : T0溢出 并置位ECF开启PCA计数器阵列溢出标志

        CL   = 0x00;    // PCA初值
        CH   = 0x00;

        // PWM0 控制
        CCAP0L = 0xc0;    // 设置比较值控制脉宽
        CCAP0H = 0xc0;    // CCAPnL 与 CCAPnH 值应相同
        CCAPM0 = 0x42;    // 模块工作模式设置为PWM输出
    PCA_PWM0 = 0x00;    // 清零PWM模式下的第9位

//        EPCA_LVD = 1;    // 允许PCA中断及低压检测中断此位不打开将无法产生PCA中断

        CR = 1;    // 开启PWM
}

unsigned char Read_ADC(unsigned char adcvcc)
{
                                                                //将P1.0--P1.1设置成适合AD转换的模式
        ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源
        delay(20);                                       //20ms
        ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
        ADC_CONTR = ADC_CONTR&0xf8|adcvcc; //设置当前通道号
        delay(10);                                                       //延时使输入电压达到稳定
        ADC_DATA = 0;                                               //清A/D转换结果寄存器
        ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
        do { ; }
        while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束
        ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG和ADC_START位,停止A/D转换
        return ADC_DATA;
}
void main()
{
                CLK_DIV = 0x00;    // 时钟分频 :不分频

                   //里要加上设置ADC的端口,如,P1.1设为ADC口的话:
    P1M0 = 0x03; //0000,0011用于A/D转换的P1.x口,先设为开漏
        P1M1 = 0xC3; //0000,0011P1.0--P1.1先设为开漏。断开内部上拉电阻
        bb=0x01;
          


   PCSW=1;                                                                
       delay(0x2000);



        while(1)
        {
          
                  if(!VACCT)
                {
                  SYSPOWER=0;               
                  delay(0x10);
                        PCSW=0;
                        delay(0x10);
                PCSW=1;
                       
                       aa=Read_ADC(1); //第一路A/D转换;如要改别的路,只要把代入通道改一下.
                 P3=aa;//这是让A/D的数据显示在P3口的LED上.
                       
                        if(VACCT==0)
                        {
                          delay(0x10);
                          if(VACCT==0)
                               {
                                       delay(0x2000);        //这个延时代定       
                                        PCSW=0;
                                  delay(0x10);
                                    PCSW=1;
                                 }
       
                          delay(0x2000);
                          SYSPOWER=1;
                        }
                }
          
          
          
       
        }
}

maoy008 发表于 2011-9-18 11:39:07

回复【4楼】zzjjhh250 华电电子
-----------------------------------------------------------------------

大哥 发份程序看下可以不706887334@qq.com不胜感激啊 卡在这里我 呵呵

maoy008 发表于 2011-9-18 11:50:08

学习了

散装805 发表于 2012-10-27 15:56:57

正在折腾12c2052

夏日么么茶 发表于 2012-10-30 13:31:28

用stc125a60s2比较方便呐

mydepc3721 发表于 2012-12-17 10:48:39

这个想法真不赖,好
页: [1]
查看完整版本: STC 单片机的 PWM怎么用?