⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 89c52 pwm 输出程序.txt

📁 使用89C52单片机输出PWM的汇编源码
💻 TXT
字号:
89C52 PWM 输出程序

时间:2007-05-23  



#include <reg52.h> //Keil header file name
#include "use.h"
#include "Ver.h"

//extern void LedOut(unsigned char *pLed);
#define Pmax 55000 //55000 //42666(18.4320)
#define Ki 2.2       //i=2

//----------------------------
sbit PwinPin=P3^5;
//----------------------------

typedef union 
{
    unsigned int Pwm;     //pwm的数据
    unsigned char PwmUse[2]; //[0]=H;[1]=L
}PWM;

//----------------------------
PWM       PwmData;
unsigned int PwmBak;
//----------------------------
unsigned char PwmF=0;     //输出的1,0的标志
/*****************************************
PWM计算,输出
t0=T50ms(b0/[fs-fo]+Sgn(U)*20%+a1
;T50ms=Pwm50+Ah
;B0<fo=>0V;Must Bo In(Fo-Fs)
*******************************************/
void PwmOut(void)
{
   float Pwm,i,k,j;
   k=Pmax+(Mp1.AH+OminH)*Ki;
   i=(PminL+Mp1.AL)*Ki;

//----------------------------
//LedOut(LedBuf);        //LED显示输出
//----------------------------
   j=(LedMenu.B-Mp1.Fo)/(Mp1.Fs-Mp1.Fo);
   if(j<0) j=0;
   if(j>1) j=1;
   Pwm=j*k; //Bo/(Fs-Fo)*Pk
   j=Pwm*0.8+k*0.2+i; //先计算
   if(Mp1.U==1) {Pwm=j;}
   else Pwm=Pwm+i;
   TR0=0;
   PwmBak=(unsigned int)Pwm; //更新数据
   TR0=1;
}
//-------------------------------
void Init_Pwm(void)
{
   PwmData.Pwm=0;
   PwmPin=0;          //输出0 (地点平)
// PwmOut();
}
//定时器0 中断处理 pwmout()
void T0_Do(void) interrupt 1{
   TR0=0;
   if(PwmF==0)  //输出高电平
   {
      PwmData.Pwm=-PwmBak;
      TH0=PwmData.PwmUse[0];
      TL0=PwmData.PwmUse[1];
      PwmPin=1;         //0 输出
      PwmF=1;
    }else{
      PwmData.Pwm=-PwmData.Pwm;
      TH0=PwmData.PwmUse[0];
      TL0=PwmData.PwmUse[1];   
      PwmPin=0;         //1 输出
      PwmF=0;
    }
    TR0=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -