licheng0620 发表于 2011-1-19 12:25:55

STC12C5410AD 能输出16位PWM吗?

看了一些论坛别人说可以,但自己亲测总是不成功
--------------------------------------------------------------------

#include <STC12C5412AD.H>   
#define uchar unsigned char   
#define uint unsigned int


sbit PWM_OUT=P3^5;//PWM输出引脚
uint PWM=2000;
/*------------------------------------------------------------------------------
** Function Name: pwm_init()
** Description    : PWM脉冲输出初始化
** Import         : NONE
** Export         : NONE
-------------------------------------------------------------------------------*/
void pwm_init(void)
{
CMOD   = 0x0a;               // 时钟源选择
CCON   = 0x00;

CH   = 0x00;               // 计数器
CL   = 0x00;

CCAP1L = (0xff &PWM);      // 模块初值
CCAP1H = (0xff & (PWM >> 8));

CCAPM1 = 0x4d;               // 设置为高速模式,允许中断

//IPH    = 0x80;               // PCA为最高优先级
IP   = 0x80;
         
CR   = 1;
EA   = 1;      
}


/*-------------------------------------------------------------------------------------------------
** Function Name: PCATask()
** Description    : pca isr
** Import         : NONE
** Export         : NONE
-------------------------------------------------------------------------------------------------*/
void PCATask(void) interrupt 6
{
if (CCF1)
   {
   CCF1= 0;
   if (PWM_OUT)
      {
      CCAP1L= (0xff &PWM);
      CCAP1H= (0xff & (PWM >> 8));    //PWM是16位的PWM占空比数据。
      }
   else
      {
         CCAP1L= 0;
         CCAP1H= 0;
      }
   }
else if (CF)   CF   = 0;
else if (CCF0) CCF0 = 0;
}
void main()   
{   
   pwm_init();
   PWM=20;
   //PWM_OUT=1;
    while(1)   
      {
      ;
         }
}

cuikai12345 发表于 2011-1-19 19:43:58

mark

416446891 发表于 2011-1-19 19:53:09

我记得数据手册上面写的是8位的PWM   虽然有4路,但是周期设置很麻烦,51的核用起来很麻烦,基本上叫做很挫,价格现在也没有什么吸引力了,还不如去用AVR

health 发表于 2011-1-19 20:12:04

没有16位硬件PWM,只能通过软件方式模拟出16位PWM。

z_zt 发表于 2011-1-19 22:20:27

回复【2楼】416446891 俊昌
-----------------------------------------------------------------------

不能这么说,只是51中的STC用起来很挫,不是所有的51都很挫,STC在价格上比起AVR来是好多了,AVR硬件本身就支持16位的PWM,STC硬件只支持8位。我有次手头上只有一块STC买的烧写器,插了一片5410,把四组PWM输出后做积分再做加法电路,做成了一个12位的DAC,我想这是STC硬件能做到的最高级别了吧。

z_zt 发表于 2011-1-19 22:31:10

上面最后一句说错了,是做成了一个10位的DAC,不是12位。

health 发表于 2011-1-20 00:19:46

可以用PCA的高速输出模式做软件16位PWM,只是需要每个周期进入一次中断。

rigol_fan 发表于 2011-1-20 08:34:31

avr硬件支持16位pwm?

licheng0620 发表于 2011-1-20 11:17:07

我的本意正是用PCA的高速输出模式做软件16位PWM,上面的程序为何行不通?

duyin2008 发表于 2011-3-15 16:35:08

stc 的 pwm 就是8位的,只能用两个输出做9位的,4个输出做10位的,外面用电路来做平均处理了
页: [1]
查看完整版本: STC12C5410AD 能输出16位PWM吗?