51单片机控制DS18B20测温的PID温控程序
(2014-02-06 09:29:28)
标签:
单片机程序偏差实际积分 |
#include//reg51.h
#include//intrins.h
#include //math.h
#include //string.h
struct PID {
unsigned int SetPoint; // 设定目标 Desired
Value
unsigned int Proportion; // 比例常数 Proportional
Const
unsigned int Integral; // 积分常数 Integral
Const
unsigned int Derivative; // 微分常数 Derivative
Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
unsigned int SumError; // Sums of Errors
};
struct PID spid; // PID Control Structure
unsigned int rout; // PID Response (Output)
unsigned int rin; // PID Feedback (Input)
sbit data1=P1^0;
sbit clk=P1^1;
sbit plus=P2^0;
sbit subs=P2^1;
sbit stop=P2^2;
sbit output=P3^4;
sbit DQ=P3^3;
unsigned char flag,flag_1=0;
unsigned char
high_time,low_time,count=0;//占空比调节参数
unsigned char set_temper=35;
unsigned char temper;
unsigned char i;
unsigned char j=0;
unsigned int s;
void delay(unsigned char time)
{
}
void write_bit(unsigned char bitval)
{
if(bitval==1)
{
}
_nop_();
_nop_();
EA=1;
}
void write_byte(unsigned char val)
{
for(i=0;i<8;i++)
{
}
// TR0=1;
}
unsigned char read_bit()
{
unsigned char i,value_bit;
EA=0;
DQ=0;
_nop_();
_nop_();
DQ=1;
for(i=0;i<2;i++){}
value_bit=DQ;
EA=1;
return(value_bit);
}
unsigned char read_byte()
{
unsigned char i,value=0;
EA=0;
for(i=0;i<8;i++)
{
if(read_bit())
value|=0x01<<i;
delay(4);
}
EA=1;
return(value);
}
unsigned char reset()
{
unsigned char presence;
EA=0;
DQ=0;
delay(30);
DQ=1;
delay(3);
presence=DQ;
delay(28);
EA=1;
return(presence);
}
void get_temper()
{
unsigned char i,j;
do
{
}
do
{
}
}
void PIDInit (struct PID *pp)
{
memset ( pp,0,sizeof(struct
PID));
}
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint
)
{
unsigned int dError,Error;
Error = pp->SetPoint -
NextPoint;
pp->SumError +=
Error;