stc12c5a60s2中文资料单片机怎样用定时器0作溢出输出pwm波

如何通过定时器0实现stc12c5a60s2可调频率的 PWM输出,晶振11.0592。_百度知道
如何通过定时器0实现stc12c5a60s2可调频率的 PWM输出,晶振11.0592。
可以实现可调频率的PWM输出。摘自stc12c5a60s2pdf文档。怎么实现啊2,定时器0的溢出脉冲,所以可以达到计一个时钟就溢出,从而达到最高频率CPU工作时钟SYSclk。通过改变定时器0的溢出率。由于定时器0可以工作在1T模式
提问者采纳
com/zhidao/pic/item/838ba61ea8d3fd1f6fbf94ca5fc5://g,截图你看看吧(主频18MHz)
其他类似问题
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁STC12C5A60S2单片机PWM程序
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
STC12C5A60S2单片机PWM程序
两个头文件
#include &REG51.H&
#include &intrins.h&
#define U8 unsigned char
#define U16 unsigned int
void DelayMs(U8 ms);
void PWM_clock(U8 clock);
void PWM_start(U8 module,U8 mode);
////////////////////// 延时子程序/////////////////////////////
void DelayMs(U8 ms) //在11.0592M晶振下,stc10f系列(单周期指令)的ms级延时
while(ms--)
for(i = 0; i & 850; i++);
////////////////////主函数入口////////////////////////////
= 0xD8; //PCA控制寄存器
= 0xD9; //PCA模式寄存器
sfr CCAPM0
= 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)
sfr CCAPM1
= 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
//PCA 定时寄存器 低位
= 0xF9; //PCA 定时寄存器 高位
sfr CCAP0L
= 0xEA; //PCA模块0的 捕获寄存器 低位
sfr CCAP0H
//PCA模块0的 捕获寄存器 高位
sfr CCAP1L
= 0xEB; //PCA模块1的 捕获寄存器 低位
sfr CCAP1H
= 0xFB; //PCA模块1的 捕获寄存器 高位
sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
//PCA计数溢出标志位
//PCA计数器 运行控制位
sbit CCF1 = 0xD9;
//PCA模块1中断标志
sbit CCF0 = 0xD8;
//PCA模块0中断标志
//* CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25%
//* CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50%
//* CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%
void PWM_clock(U8 clock);
void PWM_start(U8 module,U8 mode);
void PWM_clock(U8 clock)
CMOD |= (clock&&1);
CL = 0x00;
CH = 0x00;
void PWM_start(U8 module,U8 mode,U8 zkb)
CCAP0L = 0XC0;
CCAP0H = 0XC0;
//模块0初始输出 占空因数为25%
CCAP1L = 0XC0;
CCAP1H = 0XC0;
//模块1初始输出 占空因数为25%
if(module==0)
switch(mode)
case 0: CCAPM0 = 0X42; //模块0设置为8位PWM输出,无中断
case 1: CCAPM0 = 0X53; //模块0设置为8位PWM输出,下降沿产生中断
case 2: CCAPM0 = 0X63; //模块0设置为8位PWM输出,上升沿产生中断
case 3: CCAPM0 = 0X73; //模块0设置为8位PWM输出,跳变沿产生中断
if(module==1)
switch(mode)
case 0: CCAPM1 = 0X42; //模块1设置为8位PWM输出,无中断
case 1: CCAPM1 = 0X53; //模块1设置为8位PWM输出,下降沿产生中断
case 2: CCAPM1 = 0X63; //模块1设置为8位PWM输出,上升沿产生中断
case 3: CCAPM1 = 0X73; //模块1设置为8位PWM输出,跳变沿产生中断
if(module==2)
switch(mode)
case 0: CCAPM0 = CCAPM1 = 0X42; //模块0和1设置为8位PWM输出,无中断
case 1: CCAPM0 = CCAPM1 = 0X53; //模块0和1设置为8位PWM输出,下降沿产生中断
case 2: CCAPM0 = CCAPM1 = 0X63; //模块0和1设置为8位PWM输出,上升沿产生中断
case 3: CCAPM0 = CCAPM1 = 0X73; //模块0和1设置为8位PWM输出,跳变沿产生中断
CR=1; //PCA计数器开始计数
void PCA_Intrrpt(void) interrupt 7
if(CCF0) CCF0=0;
if(CCF1) CCF1=0;
//软件清零
//软件清零
void main()
TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */
PWM_clock(2);
// PCA/PWM时钟源为 定时器0的溢出
PWM_start(0,0); // 模块0,设置为PWM输出,无中断,初始占空因素为25%
DelayMs(250);
//下降沿触发
//开总中断
//等待中断产生,按下S15按键产生中断信号
#include &reg51.h&
#define uchar unsigned char
#define uint
unsigned int
sbit di=P3^7;
uchar jishu=0x00;
//用来记录中断的次数
void delay(uchar z)
for(i=0;i&z;i++);
//#####################################
//外部中断0子函数
void PWM_Select(void) interrupt 0
//中断一次加1
mod=jishu%3;
switch(mod)
case 0: CCAPM0 = 0X42; //0设置为25%PWM输出
case 1: CCAPM0 = 0X53; //0设置为50%PWM输出
case 2: CCAPM0 = 0X63; //0设置为75%PWM输出
delay(255);
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved热门日志推荐
人人最热标签
分享这篇日志的人常去
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场

我要回帖

更多关于 stc12c5a60s2的pwm口 的文章

 

随机推荐