STC12C5A60S2内部PWM应用Word文档下载推荐.docx

上传人:b****6 文档编号:20598259 上传时间:2023-01-24 格式:DOCX 页数:14 大小:888.68KB
下载 相关 举报
STC12C5A60S2内部PWM应用Word文档下载推荐.docx_第1页
第1页 / 共14页
STC12C5A60S2内部PWM应用Word文档下载推荐.docx_第2页
第2页 / 共14页
STC12C5A60S2内部PWM应用Word文档下载推荐.docx_第3页
第3页 / 共14页
STC12C5A60S2内部PWM应用Word文档下载推荐.docx_第4页
第4页 / 共14页
STC12C5A60S2内部PWM应用Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

STC12C5A60S2内部PWM应用Word文档下载推荐.docx

《STC12C5A60S2内部PWM应用Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《STC12C5A60S2内部PWM应用Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

STC12C5A60S2内部PWM应用Word文档下载推荐.docx

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<

REG51.H>

intrins.h>

#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)

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;

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

case2:

CCAPM0=0X63;

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

case3:

CCAPM0=0X73;

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

default:

break;

}

else

if(module==1)

CCAPM1=0X42;

//模块1设置为8位PWM输出,无中断

CCAPM1=0X53;

//模块1设置为8位PWM输出,下降沿产生中断

CCAPM1=0X63;

//模块1设置为8位PWM输出,上升沿产生中断

CCAPM1=0X73;

//模块1设置为8位PWM输出,跳变沿产生中断

else

if(module==2)

CCAPM0=CCAPM1=0X42;

//模块0和1设置为8位PWM输出,无中断

CCAPM0=CCAPM1=0X53;

//模块0和1设置为8位PWM输出,下降沿产生中断

CCAPM0=CCAPM1=0X63;

//模块0和1设置为8位PWM输出,上升沿产生中断

CCAPM0=CCAPM1=0X73;

//模块0和1设置为8位PWM输出,跳变沿产生中断

//PCA计数器开始计数

voidPCA_Intrrpt(void)interrupt7

if(CCF0)CCF0=0;

if(CCF1)CCF1=0;

//软件清零

if(CF)CF=0;

TMOD|=0x02;

/*timer0mode2:

8-Bitreload*/

TH0=0xff;

TR0=1;

PWM_clock

(2);

//PCA/PWM时钟源为定时器0的溢出

PWM_start(0,0);

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

DelayMs(250);

PwmDrive_12C5A.c

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

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

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1