安燕 发表于 2013-5-11 14:29

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的值后在程序的那个地方写入?
求高手指点,如果有类似的程序和电路图分享的话就更好了。先谢谢了。

Jackson_lv 发表于 2013-5-11 14:54

我前几天刚试过,只能输出38点几或者41点几KHz 的方波。改用定时器0可编程时钟输出方式,把晶振换成24Mhz的可以输出40.005Khz的方波

安燕 发表于 2013-5-11 15:27

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万分感谢!

Jackson_lv 发表于 2013-5-11 21:57

安燕 发表于 2013-5-11 15:27 static/image/common/back.gif
老师说晶振要用11.0592MHz或者12MHz的。40KHz左右都可以的。我做的是PWM信号源驱动超声换能器发射,有点 ...

嗯嗯,发了,不懂的话可以问我吧

安燕 发表于 2013-5-12 12:05

Jackson_lv 发表于 2013-5-11 21:57 static/image/common/back.gif
嗯嗯,发了,不懂的话可以问我吧

谢谢你了。这边还缺一个.c文件,你有空的时候再给我发一下吧。谢谢你。

为一位奶奶 发表于 2014-4-8 18:28

如果用一组数列产生PWM波,改变频率时怎样计算数据啊

armxu 发表于 2014-4-8 22:05

你要的是占脉冲?

mengyingtt 发表于 2014-4-30 13:00

Jackson_lv 发表于 2013-5-11 21:57 static/image/common/back.gif
嗯嗯,发了,不懂的话可以问我吧

你可以把程序发给我看一下么,我用的是24M晶振,253455397@qq.com,非常感谢

coody 发表于 2014-4-30 15:36

LZ不是都看到了么?
PWM的频率 = PCA 时钟输入源频率/256。

CCAP0H = CCAP0L = 0x80;//PWM0输出占空比为50%

Hhhhlnlnlnh 发表于 2015-5-8 11:00

STC12系列单片机用PWM能产生1M方波吗,接上外部晶振24M

xuling425300 发表于 2015-5-12 15:32

要用T0定时器溢出作为时钟源,这样就可以在C语言里计算出想要的频率,,可以随便用什么晶振4M6M 8M 11M 12M 25M都可以,因为可以进行时钟分频/2/4/8/16//31/64/

coody 发表于 2015-5-12 21:47

Hhhhlnlnlnh 发表于 2015-5-8 11:00
STC12系列单片机用PWM能产生1M方波吗,接上外部晶振24M

使用PWM不能输出那么快的脉冲,要使用定时器告诉脉冲输出功能,如果用24M时钟,定时器8位自动重装,则可以输出12000000/n HZ,n=1,2,.... 255。STC15系列的MCU的定时器有16位自动重装,则频率范围更宽。

kuangren321 发表于 2016-7-15 23:28

coody 发表于 2015-5-12 21:47
使用PWM不能输出那么快的脉冲,要使用定时器告诉脉冲输出功能,如果用24M时钟,定时器8位自动重装,则可 ...
请问代码如何实现1MHZ的PWM,能提供一下源代码吗?543623347@qq.com

guokeyan0 发表于 2016-7-20 16:18

楼主能看下你pca那块的代码么,最近我在看波形产生的资料,pca稍微有点迷。谢谢了404182248@qq.com

coody 发表于 2016-7-22 14:52

kuangren321 发表于 2016-7-15 23:28
请问代码如何实现1MHZ的PWM,能提供一下源代码吗?

STC12C5A60S2的PWM不能输出1MHZ的PWM,其最快PWM频率=fosc/256。使用25.6M可以输出100KHZ的8位PWM。

Mr灬自在 发表于 2016-12-10 15:29

怎么用定时器改变频率?

levii 发表于 2023-1-7 15:19

请问能发一下最终产生方波的程序吗?我想参考一下
2678217696@qq.com
页: [1]
查看完整版本: STC12C5A60S2的PWM功能产生40KHz方波