完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/********************************************************************************************* 两路PWM输出控制设置 /*********************************************************************************************/ #ifndef __SET_PWM_H__ #define __SET_PWM_H__ //***********************************************************************************/ //PWM模式设置 void Init_PWM() { // set PWM mode CCON = 0; //Initial PCA control register(PCA timer stop,Clear CF flag,Clear all module interrupt flag) CL = 0; //Reset PCA base timer CH = 0; CMOD = 0x04; //Set PCA timer clock source as timer0 overflow,Disable PCA timer overflow interrupt CCAP0H = CCAP0L =0x80; //PWM0 port output X% duty cycle square wave CCAPM0 = 0x42; //PCA module-0 work in 8-bit PWM mode and no PCA interrupt CCAP1H = CCAP1L = 0x80; //PWM1 port output X% duty cycle square wave CCAPM1 = 0x42; //PCA module-1 work in 8-bit PWM mode and no PCA interrupt CR = 1; //PCA timer start run } //***********************************************************************************/ //设置Timer0为8位自动重载模式,作为PWM时钟源 void Init_Timer0() { AUXR = 0x00; //timer0 work in 12T mode TMOD|= 0x02; //set timer0 counter mode2 (8-bit auto-reload) TH0=TL0=130; //PWM 50Hz TR0 = 1; //timer0 start running(as PWM clk) } #endif 头文件是直接用的stc12c5a60s2.h文件,就是没有波形输出,检查过很多次 寄存器配置也没发现问题,求大神帮忙看下 |
|
相关推荐
11个回答
|
|
这个是我自己用的,你可以参考一下。你直接对CCAPXH和CCAPXL赋值,就可以直接在P12,P13,P14,P15产生PWM波了。
#include #include "pca.h" void PWM_init (void) { CCON=0; CMOD=0x02; //设置PCA定时器 CL=0x00; CH=0x00; CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010) CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同 CCAP0H=0x00; // PWM0初始时为0 CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//) CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同 CCAP1H=0x00; // PWM1初始时为0 CR=1; //启动PCA定时器 } void PWM0_set (unsigned char a) //左轮 { CCAP0L= a; //设置值直接写入CCAP0L CCAP0H= a; //设置值直接写入CCAP0H } void PWM1_set (unsigned char a) //右轮 { CCAP1L= a; //设置值直接写入CCAP1L CCAP1H= a; //设置值直接写入CCAP1H }
最佳答案
|
|
|
|
芯片是正常供电的啊,也换过一个一样的芯片去试,但也一样,示波器没有波形 |
|
|
|
检查下单片机是否正常工作?
|
|
|
|
嗯嗯,谢啦,参考下 |
|
|
|
#include"stc12c5a60s2.h"
void main() { CCAPM0=0x42;//8位PWM模式 CCON=0x40; //启动PWM计数 CMOD=0x04;//设置PWM时钟使用定时器0 TMOD=0x02;//定时器0工作方式2 TH0 =0; TL0 =178;//定时78us * 256=20ms TR0 =1;//启动定时器 CCAP0H=CCAP0L=230;//占空比调整至10% } 我昨天实验的,有波形50hz。工作方式也和你的类似,据说TH0只能为0,TL0自己工作,我试了下,TH0赋值后,波形频率不对。而且我给TLO赋其他值,波形都不产生了,我现在还不知道怎么回事呢,你知道为啥不,讨论讨论。 |
|
|
|
#include"stc12c5a60s2.h"
void main() { CCAPM0=0x42;//8位PWM模式 CCON=0x40; //启动PWM计数 CMOD=0x04;//设置PWM时钟使用定时器0 TMOD=0x02;//定时器0工作方式2 TH0 =178; TL0 =178;//定时78us * 256=20ms TR0 =1;//启动定时器 while(1) { CCAP0H=CCAP0L=230;//占空比调整至10% } } 我的问题解决了,这个频率可调,TH0,TL0都需要赋值。之前那个程序不成,可能是没加while (1),自身循环运行了,导致定时不准。 |
|
|
|
定时器的话TH0和TL0肯定都要重装初值啊。 |
|
|
|
恩恩,我发的第二个调整了,你产生的波形怎么样,我的波形显示单位为0.5mv的时候,上升沿有些抖动,是程序问题么,你的波形整齐么。
|
|
|
|
嗯嗯,还可以。要记得在主程序加while(1); |
|
|
|
输出PWM后怎么在程序中调节占空比?????例如中断中怎么赋值能改变输出PWM的占空比????
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNK210使用指南 -CanMV版 V1.0》第八章 CanMV IDE初体验
458 浏览 0 评论
过采样提高12位ADC精度在STM32主控上的实现(附电路及代码)
570 浏览 0 评论
飞凌嵌入式-ELFBOARD 解决PCB布线时无法捕捉到焊盘中心的问题
878 浏览 0 评论
Openharmony软件评估指南-米尔瑞芯微RK3568开发板
1322 浏览 0 评论
STM32CUBEMX(7)--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压
1226 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11113 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-16 18:00 , Processed in 0.829737 second(s), Total 59, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号