STC12C5A60S2内部PWM应用.docx

上传人:b****6 文档编号:13132695 上传时间:2023-06-11 格式:DOCX 页数:15 大小:888.29KB
下载 相关 举报
STC12C5A60S2内部PWM应用.docx_第1页
第1页 / 共15页
STC12C5A60S2内部PWM应用.docx_第2页
第2页 / 共15页
STC12C5A60S2内部PWM应用.docx_第3页
第3页 / 共15页
STC12C5A60S2内部PWM应用.docx_第4页
第4页 / 共15页
STC12C5A60S2内部PWM应用.docx_第5页
第5页 / 共15页
STC12C5A60S2内部PWM应用.docx_第6页
第6页 / 共15页
STC12C5A60S2内部PWM应用.docx_第7页
第7页 / 共15页
STC12C5A60S2内部PWM应用.docx_第8页
第8页 / 共15页
STC12C5A60S2内部PWM应用.docx_第9页
第9页 / 共15页
STC12C5A60S2内部PWM应用.docx_第10页
第10页 / 共15页
STC12C5A60S2内部PWM应用.docx_第11页
第11页 / 共15页
STC12C5A60S2内部PWM应用.docx_第12页
第12页 / 共15页
STC12C5A60S2内部PWM应用.docx_第13页
第13页 / 共15页
STC12C5A60S2内部PWM应用.docx_第14页
第14页 / 共15页
STC12C5A60S2内部PWM应用.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

STC12C5A60S2内部PWM应用.docx

《STC12C5A60S2内部PWM应用.docx》由会员分享,可在线阅读,更多相关《STC12C5A60S2内部PWM应用.docx(15页珍藏版)》请在冰点文库上搜索。

STC12C5A60S2内部PWM应用.docx

STC12C5A60S2内部PWM应用

【PWM】

.

实例一:

电路图如上,该程序的功能是利用按键S1对LED的亮度进行调节。

程序如下:

#include"STC12C5A.h"//注意这个头文件,用reg52是不行的,如果你没有的话,可以去百////度文档里搜索“STC12C5A系列单片机头文件”,有我共享的头文件。

voiddelay(unsignedintcnt)

{

unsignedchari;

for(;cnt>0;cnt--)

for(i=0;i<250;i++);

}

voidmain()

{

CCON=0;//PCA初始化

CL=0;//PCA的16位计数器低八位

CH=0;//PCA的16位计数器高八位

CMOD=0x00;//选择系统时钟/12为计数脉冲,则PWM的频率f=sysclk/256/12;

CCAP0H=0x80;//占空比控制

CCAP0L=0x80;

PCA_PWM0=0x00;//控制占空比的第九位为0

CCAPM0=0x42;//允许P13作为PWM输出

CR=1;//启动PCA计数器

while

(1)

{

if(P10==0)

{

delay(200);

while(P10==0);

CCAP0H+=10;//占空比调节

CCAP0L+=10;

}

}

}

实例二:

两个文件

main.c

#include

#include

#defineU8unsignedchar

#defineU16unsignedint

voidDelayMs(U8ms);

voidPWM_clock(U8clock);

voidPWM_start(U8module,U8mode);

//////////////////////延时子程序/////////////////////////////

voidDelayMs(U8ms)//在11.0592M晶振下,stc10f系列(单周期指令)的ms级延时

{

U16i;

while(ms--)

{

for(i=0;i<850;i++);

}

}

////////////////////主函数入口////////////////////////////

sfrCCON=0xD8;//PCA控制寄存器

sfrCMOD=0xD9;//PCA模式寄存器

sfrCCAPM0=0xDA;//PCA模块0模式寄存器//模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)

sfrCCAPM1=0xDB;//PCA模块1模式寄存器//模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)

sfrCL=0xE9;//PCA定时寄存器低位

sfrCH=0xF9;//PCA定时寄存器高位

sfrCCAP0L=0xEA;//PCA模块0的捕获寄存器低位

sfrCCAP0H=0xFA;//PCA模块0的捕获寄存器高位

sfrCCAP1L=0xEB;//PCA模块1的捕获寄存器低位

sfrCCAP1H=0xFB;//PCA模块1的捕获寄存器高位

sfrPCA_PWM0=0xF2;//PCAPWM模式辅助寄存器0

sfrPCA_PWM1=0xF3;//PCAPWM模式辅助寄存器1

sbitCF=0xDF;//PCA计数溢出标志位

sbitCR=0xDE;//PCA计数器运行控制位

sbitCCF1=0xD9;//PCA模块1中断标志

sbitCCF0=0xD8;//PCA模块0中断标志

//*CCAPOH=CCAPOL=0XC0;//模块0输出占空因数为25%

//*CCAPOH=CCAPOL=0X80;//模块0输出占空因数为50%

//*CCAPOH=CCAPOL=0X40;//模块0输出占空因数为75%

voidPWM_clock(U8clock);

voidPWM_start(U8module,U8mode);

voidPWM_clock(U8clock)

{

CMOD|=(clock<<1);

CL=0x00;

CH=0x00;

}

voidPWM_start(U8module,U8mode)

{

CCAP0L=0XC0;

CCAP0H=0XC0;//模块0初始输出占空因数为25%

CCAP1L=0XC0;

CCAP1H=0XC0;//模块1初始输出占空因数为25%

if(module==0)

{

switch(mode)

{

case0:

CCAPM0=0X42;break;//模块0设置为8位PWM输出,无中断

case1:

CCAPM0=0X53;break;//模块0设置为8位PWM输出,下降沿产生中断

case2:

CCAPM0=0X63;break;//模块0设置为8位PWM输出,上升沿产生中断

case3:

CCAPM0=0X73;break;//模块0设置为8位PWM输出,跳变沿产生中断

default:

break;

}

}

else

if(module==1)

{

switch(mode)

{

case0:

CCAPM1=0X42;break;//模块1设置为8位PWM输出,无中断

case1:

CCAPM1=0X53;break;//模块1设置为8位PWM输出,下降沿产生中断

case2:

CCAPM1=0X63;break;//模块1设置为8位PWM输出,上升沿产生中断

case3:

CCAPM1=0X73;break;//模块1设置为8位PWM输出,跳变沿产生中断

default:

break;

}

}

else

if(module==2)

{

switch(mode)

{

case0:

CCAPM0=CCAPM1=0X42;break;//模块0和1设置为8位PWM输出,无中断

case1:

CCAPM0=CCAPM1=0X53;break;//模块0和1设置为8位PWM输出,下降沿产生中断

case2:

CCAPM0=CCAPM1=0X63;break;//模块0和1设置为8位PWM输出,上升沿产生中断

case3:

CCAPM0=CCAPM1=0X73;break;//模块0和1设置为8位PWM输出,跳变沿产生中断

default:

break;

}

}

CR=1;//PCA计数器开始计数

}

voidPCA_Intrrpt(void)interrupt7

{

if(CCF0)CCF0=0;

if(CCF1)CCF1=0;//软件清零

if(CF)CF=0;//软件清零

}

voidmain()

{

TMOD|=0x02;/*timer0mode2:

8-Bitreload*/

TH0=0xff;

TR0=1;

PWM_clock

(2);//PCA/PWM时钟源为定时器0的溢出

PWM_start(0,0);//模块0,设置为PWM输出,无中断,初始占空因素为25%

while

(1)

{

DelayMs(250);

}

}

PwmDrive_12C5A.c

#include

#defineU8unsignedchar

sfrCCON=0xD8;//PCA控制寄存器

sfrCMOD=0xD9;//PCA模式寄存器

sfrCCAPM0=0xDA;//PCA模块0模式寄存器//模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)

sfrCCAPM1=0xDB;//PCA模块1模式寄存器//模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)

sfrCL=0xE9;//PCA定时寄存器低位

sfrCH=0xF9;//PCA定时寄存器高位

sfrCCAP0L=0xEA;//PCA模块0的捕获寄存器低位

sfrCCAP0H=0xFA;//PCA模块0的捕获寄存器高位

sfrCCAP1L=0xEB;//PCA模块1的捕获寄存器低位

sfrCCAP1H=0xFB;//PCA模块1的捕获寄存器高位

sfrPCA_PWM0=0xF2;//PCAPWM模式辅助寄存器0

sfrPCA_PWM1=0xF3;//PCAPWM模式辅助寄存器1

sbitCF=0xDF;//PCA计数溢出标志位

sbitCR=0xDE;//PCA计数器运行控制位

sbitCCF1=0xD9;//PCA模块1中断标志

sbitCCF0=0xD8;//PCA模块0中断标志

//*CCAPOH=CCAPOL=0XC0;//模块0输出占空因数为25%

//*CCAPOH=CCAPOL=0X80;//模块0输出占空因数为50%

//*CCAPOH=CCAPOL=0X40;//模块0输出占空因数为75%

voidPWM_clock(U8clock);

voidPWM_start(U8module,U8mode);

voidPWM_clock(U8clock)

{

CMOD|=(clock<<1);

CL=0x00;

CH=0x00;

}

voidPWM_start(U8module,U8mode)

{

CCAP0L=0XC0;

CCAP0H=0XC0;//模块0初始输出占空因数为25%

CCAP1L=0XC0;

CCAP1H=0XC0;//模块1初始输出占空因数为25%

if(module==0)

{

switch(mode)

{

case0:

CCAPM0=0X42;break;//模块0设置为8位PWM输出,无中断

case1:

CCAPM0=0X53;break;//模块0设置为8位PWM输出,下降沿产生中断

case2:

CCAPM0=0X63;break;//模块0设置为8位PWM输出,上升沿产生中断

case3:

CCAPM0=0X73;break;//模块0设置为8位PWM输出,跳变沿产生中断

default:

break;

}

}

else

if(module==1)

{

switch(mode)

{

case0:

CCAPM1=0X42;break;//模块1设置为8位PWM输出,无中断

case1:

CCAPM1=0X53;break;//模块1设置为8位PWM输出,下降沿产生中断

case2:

CCAPM1=0X63;break;//模块1设置为8位PWM输出,上升沿产生中断

case3:

CCAPM1=0X73;break;//模块1设置为8位PWM输出,跳变沿产生中断

default:

break;

}

}

else

if(module==2)

{

switch(mode)

{

case0:

CCAPM0=CCAPM1=0X42;break;//模块0和1设置为8位PWM输出,无中断

case1:

CCAPM0=CCAPM1=0X53;break;//模块0和1设置为8位PWM输出,下降沿产生中断

case2:

CCAPM0=CCAPM1=0X63;break;//模块0和1设置为8位PWM输出,上升沿产生中断

case3:

CCAPM0=CCAPM1=0X73;break;//模块0和1设置为8位PWM输出,跳变沿产生中断

default:

break;

}

}

CR=1;//PCA计数器开始计数

}

voidPCA_Intrrpt(void)interrupt7

{

if(CCF0)CCF0=0;

if(CCF1)CCF1=0;//软件清零

if(CF)CF=0;//软件清零

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2