STC12C5A60S2的PWM功能产生40KHz方波
本帖最后由 安燕 于 2013-5-12 22:04 编辑我现在需要用STC12C5A60S2单片机的PWM功能产生40KHz方波。我在芯片的数据手册里找到一个例子:
#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控制寄存器
sbitCCF0 = CCON^0; //PCA模式0中断标志位
sbitCCF1 = CCON^1; //PCA模式1中断标志位
sbitCR = CCON^6; //PCA定时器运行控制位
sbitCF = CCON^7; //PCA定时器溢出标志位
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CL = 0xE9; //PCA时基低8位
sfr CH = 0xF9; //PCA时基高8位
sfr CCAPM0 = 0xDA; //PCA单元0模式寄存器
sfr CCAP0L = 0xEA; //PCA单元0捕捉寄存器低8位
sfr CCAP0H = 0xFA; //PCA单元0捕捉寄存器高8位
sfr CCAPM1 = 0xDB; //PCA单元1模式寄存器
sfr CCAP1L = 0xEB; //PCA单元1捕捉寄存器低8位
sfr CCAP1H = 0xFB; //PCA单元1捕捉寄存器高8位
sfr PCAPWM0 = 0xf2;
sfr PCAPWM1 = 0xf3;
void main()
{
CCON = 0; //PCA控制寄存器初始化
//PCA定时器停止运行
//清楚CF标志位
//清除全部单元中断标志位
CL = 0; //PCA时基复位
CH = 0;
CMOD = 0x02; //设置PCA时钟源为FOSC/2
//PCA时钟溢出不能使位
CCAP0H = CCAP0L = 0x80; //PWM0输出占空比为50%
CCAPM0 = 0x42; //PCA工作在8bit模式
//PCA不中断
CCAP1H = CCAP1L = 0xff; //PWM 输出占空比0%
PCAPWM1 = 0x03;
CCAPM1 = 0x42; //PCA工作在8bit模式
//PCA不中断
CR =1; //PCA定时启动
while ( 1);
}
我不知道要在哪里写入我需要的频率?
由于PWM是8位的,所以 PWM的频率=PCA 时钟输入源频率/256
PCA 时钟输入源可以从以下8种中选择一种:SYSclk, SYSclk/2 , SYSclk/4 ,SYSclk/6 ,SYSclk/8 ,SYSclk/2,定时器0的溢出,ECI/P3.4 输入。
CMOD = 0x02;那我选用的PCA时钟输入源就是SYSclk/2,我根据上述公式计算出SYSclk的值后在程序的那个地方写入?
求高手指点,如果有类似的程序和电路图分享的话就更好了。先谢谢了。 我前几天刚试过,只能输出38点几或者41点几KHz 的方波。改用定时器0可编程时钟输出方式,把晶振换成24Mhz的可以输出40.005Khz的方波 Jackson_lv 发表于 2013-5-11 14:54 static/image/common/back.gif
我前几天刚试过,只能输出38点几或者41点几KHz 的方波。改用定时器0可编程时钟输出方式,把晶振换成24Mhz的 ...
老师说晶振要用11.0592MHz或者12MHz的。40KHz左右都可以的。我做的是PWM信号源驱动超声换能器发射,有点误差也没事。如果可以能不能把你的程序和电路图发给我借鉴一下。我的邮箱474866320@qq.com万分感谢! 安燕 发表于 2013-5-11 15:27 static/image/common/back.gif
老师说晶振要用11.0592MHz或者12MHz的。40KHz左右都可以的。我做的是PWM信号源驱动超声换能器发射,有点 ...
嗯嗯,发了,不懂的话可以问我吧 Jackson_lv 发表于 2013-5-11 21:57 static/image/common/back.gif
嗯嗯,发了,不懂的话可以问我吧
谢谢你了。这边还缺一个.c文件,你有空的时候再给我发一下吧。谢谢你。 如果用一组数列产生PWM波,改变频率时怎样计算数据啊 你要的是占脉冲? Jackson_lv 发表于 2013-5-11 21:57 static/image/common/back.gif
嗯嗯,发了,不懂的话可以问我吧
你可以把程序发给我看一下么,我用的是24M晶振,253455397@qq.com,非常感谢 LZ不是都看到了么?
PWM的频率 = PCA 时钟输入源频率/256。
CCAP0H = CCAP0L = 0x80;//PWM0输出占空比为50% STC12系列单片机用PWM能产生1M方波吗,接上外部晶振24M 要用T0定时器溢出作为时钟源,这样就可以在C语言里计算出想要的频率,,可以随便用什么晶振4M6M 8M 11M 12M 25M都可以,因为可以进行时钟分频/2/4/8/16//31/64/ Hhhhlnlnlnh 发表于 2015-5-8 11:00
STC12系列单片机用PWM能产生1M方波吗,接上外部晶振24M
使用PWM不能输出那么快的脉冲,要使用定时器告诉脉冲输出功能,如果用24M时钟,定时器8位自动重装,则可以输出12000000/n HZ,n=1,2,.... 255。STC15系列的MCU的定时器有16位自动重装,则频率范围更宽。 coody 发表于 2015-5-12 21:47
使用PWM不能输出那么快的脉冲,要使用定时器告诉脉冲输出功能,如果用24M时钟,定时器8位自动重装,则可 ...
请问代码如何实现1MHZ的PWM,能提供一下源代码吗?543623347@qq.com 楼主能看下你pca那块的代码么,最近我在看波形产生的资料,pca稍微有点迷。谢谢了404182248@qq.com kuangren321 发表于 2016-7-15 23:28
请问代码如何实现1MHZ的PWM,能提供一下源代码吗?
STC12C5A60S2的PWM不能输出1MHZ的PWM,其最快PWM频率=fosc/256。使用25.6M可以输出100KHZ的8位PWM。 怎么用定时器改变频率?
请问能发一下最终产生方波的程序吗?我想参考一下
2678217696@qq.com
页:
[1]