89C52 PWM输出程序
来源:互联网 发布:万网买的域名怎么备案 编辑:程序博客网 时间:2024/05/16 15:52
#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;
}
- 89C52 PWM输出程序
- 89C52 PWM输出程序
- 树莓派硬件PWM输出程序
- PWM输出
- PWM输出
- 89c52 EEPROM使用
- 89C52单片机之数码管
- 89C52单片机之串口
- 基于80c52的时钟程序
- 基于C52的MMA7455测试程序
- STC - PWM输出汇总
- s3c2440的pwm输出
- 通用定时器PWM输出
- 单片机 PWM输出 c
- MSP430_定时器输出PWM
- cc2530火警pwm输出
- 5、PWM输出实验
- stm32 PWM输出学习
- 这一季烟火
- 单片机和MODEM接口及远程数据传输
- 委托(二)
- 51单片机控制LED显示汉字
- java笔试题目(java面试题)
- 89C52 PWM输出程序
- 关于“功能点分析-成功软件项目的测量实践”
- 使用PWM得到精密的输出电压
- jQuery1.1 API 中文版 第三部分CSS
- 用c#实现把汉字转换成拼音
- 我经常去的地方
- jQuery1.1 API 中文版 第四部分JavaScript
- ADO.NET 2.0 功能一览
- 电路图:MC34063 2.2V-6V升压到7V电路