• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

晒晒我用at89s52做的spwm,源代码

做逆变是不行的,我测了下同期160多ms ,频率6.8HZ,不知道要怎么改,请高手指正。。。(很多人说用PIC,或STC的MCU,可我手上只有AT89s52,再者我也只是拿来玩玩,,,学学单片机的)

贴代码:

#include "at89x52.h"

sbit led0=P0^0;
sbit led1=P0^1;//这里是spwm输出第一组
sbit led2=P0^2;//这里是spwm第二组
bit flag_out;//标志位用来切换是第一组输出还是第二组输出
unsigned char t_num=0;
unsigned char spwm_tab[16]={0,20,38,56,71,83,92,98,100,98,92,83,71,56,38,20};//用excel算的,只取这几个简单些

void delayus()
                { 
      unsigned int tm;
       for(tm=2000;tm>0;tm--)
           {

             {;}
        }
    }

void int_time0(void)
                 {
      TMOD=0x02;//之前是TMOD=0x11,中断后还要加初值,现在改为自动重装。
                  EA=1;
                  ET0=1;
      TH0=230/256;//
      TL0=230%256;//理论上应该256-230=26us
     }
void timer0(void) interrupt 1
                    {
      static unsigned char c_time=0;
                       if(spwm_tab[t_num]>c_time)
                {
           if(flag_out)led1=1;
        else led2=1;
          }
      else led1=0,led2=0;
      c_time=c_time+1;
      if(c_time>99)
              {
        
         c_time=0;
         t_num=t_num+1;
         if(t_num>15)t_num=0,flag_out=~flag_out;
        }
       // TH0=65530/256;
        //TL0=65530%256;/*这个因为有重装就不用了,省了两条指令*/

     }
         
void main (void)
             {
    
     P0=0xff;
               int_time0();
      TR0=1;
     while(1)
            {led0=~led0;
          delayus();
      }

     }

今天改了代码,顺便拍了两张

 

 

 

周期40多ms,22.7HZ,比之前的代码要高了,但仍不能实用。。。继续ing。。。

 

全部回复(9)
正序查看
倒序查看
小矿石
LV.10
2
2012-09-10 18:11
采样点过于少了,逆变不出来的
0
回复
yuzhou.yu
LV.5
3
2012-09-10 21:11
非常好噢!我顶你!哪天我也用你的程序试试!哈哈,太好了!
0
回复
IGBT2010
LV.8
4
2012-09-11 08:10
楼主,反馈在哪里?
0
回复
廖远方
LV.9
5
2012-09-11 10:33
 
0
回复
2012-09-11 10:55
@小矿石
采样点过于少了,逆变不出来的
因为89s52不带PWM模块的,所以采样点多了,会让整个周期变长,也不知道是不是我的算法不对。。。
0
回复
2012-09-11 10:56
@yuzhou.yu
[图片]非常好噢!我顶你!哪天我也用你的程序试试!哈哈,太好了![图片]
帮忙改改呀。。。这个只是个试验用的。。。
0
回复
支持你
LV.6
8
2012-09-11 10:58
@廖远方
[图片] 
飞机起飞了
0
回复
2012-09-11 11:01
@IGBT2010
楼主,反馈在哪里?

只是试验不带PWM的单片机能不能出可以用的spwm波,本身AT89S52不带PWM,也没有AD,反馈实现起来不容易,也许可以在外围加个比较器来判断。。。但那还远远没到那一步,我现在还没有把频率做到50HZ,波形也不好看(我用个47K的电阻加三个0.22的安规电容)。。。纯粹的试验玩的

0
回复
小矿石
LV.10
10
2012-09-11 16:32
@廖远方
[图片] 
0
回复