zhongpei 发表于 2010-6-19 17:32:31

stc 1T单片机模拟pwm怎样提高输出频率

使用增强型51单片机怎样提高模拟pwn频率,现在的程序可以到4KHz。
程序:
#include <stc51.h>

#define uchar unsigned char
#define uint unsigned int
sbit pwm0=P0^0;
sbit pwm1=P0^1;
uchar pwm=0,pwm_counter0=30;pwm_counter1=20;

void Timer0() interrupt 1//使用中断向量1,定时器0
{
if(pwm==pwm_counter0)
             pwm0=~pwm0;
          if(pwm==pwm_counter1)
          pwm1=~pwm1;
             pwm++;
                     if(pwm==50)
       { pwm=0;
         pwm0=0;
             pwm1=1;
           }   
}

void main()
{
   
   TMOD=0X02;   //定时器1不使用,定时器0自动重装8位模式
   AUXR=0x80;//使用1T
   TH0=254;
       TL0=254;
   EA=1;
   ET0=1;
   pwm0=0;
             pwm1=1;
       TR0=1;//启动定时器
while(1)
   {
         
}
}
http://cache.amobbs.com/bbs_upload782111/files_29/ourdev_562681W2ZR2V.jpg
波形 (原文件名:图片 001.jpg)

amazing030 发表于 2010-6-19 17:40:40

1T单片机好像都带PCA/PWM模块的吧,用硬件产生会快不少。
软件的话如果只是简单应用,也可以不用定时器

sbit LED = P1^0;

void PWM(uchar dat)
{
    uchar i;
    for(i = 0; i < 255; i++)
    {
      LED = (dat >= i) ? 1 : 0;
    }
}
你想要快的话就可以把占空比调一下,如:
    for(i = 0; i < 5; i++)

zhongpei 发表于 2010-6-19 17:47:17

回复【1楼】amazing030
-----------------------------------------------------------------------

因为使用的时候两路pwm信号需要的是不能同时为高电平而且占空比可控所以才使用自己模拟产生

amazing030 发表于 2010-6-19 17:49:46

那就使用PCA定时产生PWM中断,一个PCA计数就行了,和你用T0一样

amazing030 发表于 2010-6-19 17:51:20

另外它的定时器是可以12倍频的

zhongpei 发表于 2010-6-19 17:56:46

回复【4楼】amazing030
-----------------------------------------------------------------------

定时器已经是12倍频的了,时间消耗在我中断服务程序里,我试一下你的pca中断,谢谢啦

zpyws 发表于 2010-6-19 18:32:34

使用PCA功能,时钟来源设置为Fosc
页: [1]
查看完整版本: stc 1T单片机模拟pwm怎样提高输出频率