单片机/MCUwilliam hill官网
直播中

lyy

12年用户 21经验值
擅长:RF/无线
私信 关注

STC12C5A60S2单片机怎么才能输出占空比可调的PWM???

本帖最后由 yue 于 2015-4-20 22:05 编辑

STC12C5A60S2输出PWM后怎么在程序中调节占空比?????例如中断中怎么赋值能改变输出PWM的占空比????
已退回5积分

回帖(9)

yesheng_tang

2015-4-20 22:35:30
以前用过STC其它型号的做过PWM,也可以调节占空比,你仔细看手册,里面很详细的。
举报

Anguskong

2015-4-20 22:41:24
规格书上有对应的寄存器,一个是设置Pwm的频率,一个是设置占空比,你要调频的话改变设置占空比的寄存器就可以了
举报

lyy

2015-4-20 22:41:45
手册中只有输出固定占空比的例程,我改调节占空比的参数结果占空比还是没有变化
举报

lyy

2015-4-20 23:49:03

#include "reg51.h"
#include "intrins.h"
#define  FOSC     18432000L
typedef  unsigned  char  BYTE;
typedef  unsigned  int  WORD;
/*Declare SFR associated with the PCA */
sfr  CCON         =   0xD8;              //PCA control register
***it  CCF0        =   CCON^0;            //PCA module-0 interrupt flag
***it  CCF1        =   CCON^1;            //PCA module-1 interrupt flag
***it  CR           =   CCON^6;            //PCA timer run control bit
***it  CF           =   CCON^7;            //PCA timer overflow flag
sfr  CMOD         =   0xD9;              //PCA mode register
sfr  CL            =   0xE9;             //PCA base timer LOW
sfr  CH            =   0xF9;              //PCA base timer HIGH
sfr  CCAPM0       =   0xDA;              //PCA module-0 mode register
sfr  CCAP0L       =   0xEA;              //PCA module-0 capture register LOW
sfr  CCAP0H      =   0xFA;              //PCA module-0 capture register HIGH
sfr  CCAPM1       =   0xDB;              //PCA module-1 mode register
sfr  CCAP1L       =   0xEB;              //PCA module-1 capture register LOW
sfr  CCAP1H       =   0xFB;              //PCA module-1 capture register HIGH
sfr  PCAPWM0      =   0xf2;
sfr  PCAPWM1      =   0xf3;
***it k=P1^0;
BYTE a=0;
void main()

{
CCON = 0;                         //Initial PCA control register                                       
                    //PCA timer stop running                                       
                    //Clear CF flag                                       
                    //Clear all module interrupt flag     
CL = 0;                           //Reset PCA base timer     

CH = 0;     
CMOD = 0x02;                      //Set PCA timer clock source as Fosc/2                                       
                  //Disable PCA timer overflow interrupt     
CCAP0H = CCAP0L =a;         //PWM0 port output 50% duty cycle square wave     
CCAPM0 = 0x42;                    //PCA module-0 work in 8-bit PWM mode      
PCAPWM0 = 0x03;                //and no PCA interrupt
CCAP1H = CCAP1L = 255;          //PWM1 port output 0% duty cycle square wave
PCAPWM1 = 0x03;     
CCAPM1 = 0x42;                    //PCA module-1 work in 8-bit PWM mode and no PCA interrupt

  CR = 1;                        //PCA timer start run

EA=1;
EX0=1;
while(1);
}
void inter0() interrupt 0
{
a=200;
}
这是把手册上例程修改过的程序,通过中断修改a的值从而使100%的占空比变为(256-200)/256的占空比,但是达不到预期的要求,求大神指点。。。。。。。。。。
举报

leon_sun

2015-4-21 17:09:15
计时器控制高低电平随便来啊
举报

h1654155948.1452

2016-3-24 17:37:09
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

金球仔

2016-3-24 19:40:48
谢谢。。。。。。。。。。。。。。。。。。我试试程序                     
举报

ying

2017-5-11 22:43:39
CCAP0H=CCAP0L这两个是什么关系?
举报

忆伤心醉

2017-8-2 00:45:24
引用: yue 发表于 2015-4-20 23:49
#include "reg51.h"
#include "intrins.h"
#define  FOSC     18432000L

去掉PCAPWM0 = 0x30;
举报

更多回帖

发帖
×
20
完善资料,
赚取积分