网站导航: 首页 > 设计参考 > 正文 文章搜索
89C52 PWM输出程序
 
文章编号:
081203214148
文章分类: 单片机 51系列
点 击:
...
关 键 词: PWM
文章来源:
网络
摘 要:

 
  1. #include <reg52.h> //Keil header file name   
  2. #include "use.h"   
  3. #include "Ver.h"   
  4.   
  5. //extern void LedOut(unsigned char *pLed);   
  6. #define Pmax 55000 //55000 //42666(18.4320)   
  7. #define Ki 2.2       //i=2   
  8.   
  9. //----------------------------   
  10. sbit PwinPin=P3^5;   
  11. //----------------------------   
  12.   
  13. typedef union    
  14. {   
  15.     unsigned int Pwm;     //pwm的数据   
  16.     unsigned char PwmUse[2]; //[0]=H;[1]=L   
  17. }PWM;   
  18.   
  19. //----------------------------   
  20. PWM       PwmData;   
  21. unsigned int PwmBak;   
  22. //----------------------------   
  23. unsigned char PwmF=0;     //输出的1,0的标志   
  24. /*****************************************  
  25. PWM计算,输出  
  26. t0=T50ms(b0/[fs-fo]+Sgn(U)*20%+a1  
  27. ;T50ms=Pwm50+Ah  
  28. ;B0<fo=>0V;Must Bo In(Fo-Fs)  
  29. *******************************************/  
  30. void PwmOut(void)   
  31. {   
  32.     float Pwm,i,k,j;   
  33.     k=Pmax+(Mp1.AH+OminH)*Ki;   
  34.     i=(PminL+Mp1.AL)*Ki;   
  35.        
  36.     //----------------------------   
  37.     //LedOut(LedBuf);        //LED显示输出   
  38.     //----------------------------   
  39.     j=(LedMenu.B-Mp1.Fo)/(Mp1.Fs-Mp1.Fo);   
  40.     if(j<0) j=0;   
  41.     if(j>1) j=1;   
  42.     Pwm=j*k; //Bo/(Fs-Fo)*Pk   
  43.     j=Pwm*0.8+k*0.2+i; //先计算   
  44.     if(Mp1.U==1) {Pwm=j;}   
  45.     else Pwm=Pwm+i;   
  46.     TR0=0;   
  47.     PwmBak=(unsigned int)Pwm; //更新数据   
  48.     TR0=1;   
  49. }   
  50. //-------------------------------   
  51. void Init_Pwm(void)   
  52. {   
  53.     PwmData.Pwm=0;   
  54.     PwmPin=0;          //输出0 (地点平)   
  55.     // PwmOut();   
  56. }   
  57. //定时器0 中断处理 pwmout()   
  58. void T0_Do(void) interrupt 1{   
  59.     TR0=0;   
  60.     if(PwmF==0)  //输出高电平   
  61.     {   
  62.         PwmData.Pwm=-PwmBak;   
  63.         TH0=PwmData.PwmUse[0];   
  64.         TL0=PwmData.PwmUse[1];   
  65.         PwmPin=1;         //0 输出   
  66.         PwmF=1;   
  67.     }else{   
  68.         PwmData.Pwm=-PwmData.Pwm;   
  69.         TH0=PwmData.PwmUse[0];   
  70.         TL0=PwmData.PwmUse[1];      
  71.         PwmPin=0;         //1 输出   
  72.         PwmF=0;   
  73.     }   
  74.     TR0=1;   
  75. }  

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4