单片机PID控制

更新时间:2023-05-23 05:50:47 阅读: 评论:0

经典PID调节,恒温控制。
2009-08—11 20:37#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 Respon (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 t_temper=35; 
unsigned char temper;       
unsigned char i;
unsigned char j=0;
unsigned int s;
/***********************************************************
延时子程序,延时时间以12M晶振为准,延时时间为30us×time
***********************************************************/
void delay(unsigned char time)
  unsigned char m,n;
    for(n=0;n<time;n++)
吃什么可以催经
      for(m=0;m<2;m++){}
/***********************************************************
写一位数据子程序
***********************************************************/
void write_bit(unsigned char bitval)
{
    EA=0;
      DQ=0;  /*拉低DQ以开始一个写时序*/
    if(bitval==1)
      {
        _nop_();
        DQ=1;    /*如要写1,则将总线置高*/
        }
电脑软件怎么更新      delay(5);    /*延时90us供DA18B20采样*/
    DQ=1;  /*释放DQ总线*/
    _nop_();
    _nop_();
  EA=1;
  }
/***********************************************************
写一字节数据子程序
*********************************************************
**/
void write_byte(unsigned char val)
{
unsigned char i;
unsigned char temp;
EA=0;
TR0=0;
for(i=0;i<8;i++)  /*写一字节数据,一次写一位*/青加见念什么
      {
      temp=val>〉i;  /*移位操作,将本次要写的位移到最低位*/
      temp=temp&1;
      write_bit(temp);  /*向总线写该位*/
      }
  delay(7);    /*延时120us后*/
// TR0=1;
EA=1;
/***********************************************************
读一位数据子程序
***********************************************************/
unsigned char read_bit()
{
unsigned char i,value_bit;
康健园EA=0;
DQ=0;    /*拉低DQ,开始读时序*/
_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);  /*延时80us以完成此次都时序,之后再读下一数据*/
      }
  EA=1;
  return(value);
}
/***********************************************************
复位子程序
***********************************************************/
unsigned char ret()
{
  unsigned char prence;
  EA=0;
  DQ=0;    /*拉低DQ总线开始复位*/
  delay(30);    /*保持低电平480us*/
  DQ=1;    /*释放总线*/
  delay(3); 
  prence=DQ;    /*获取应答信号*/
  delay(28);    /*延时以完成整个时序*/
  EA=1;
  return(prence);  /*返回应答信号,有芯片应答返回0,无芯片则返回1*/
}豆腐皮怎么吃
/***********************************************************
获取温度子程序
***********************************************************/
void get_temper()
unsigned char i,j;
do
{
    i=ret();  /*复位*/
}while(i!=0);  /*1为无反馈信号*/
i=0xcc;  /*发送设备定位命令*/
write_byte(i);
i=0x44;  /*发送开始转换命令*/
write_byte(i);
delay(180);  /*延时*/
do
{
i=ret();  /*复位*/
}while(i!=0); 
i=0xcc;  /*设备定位*/
write_byte(i);
i=0xbe;  /*读出缓冲区内容*/
write_byte(i);
j=read_byte();
i=read_byte(); 
i=(i〈〈4)&0x7f;
s=(unsigned int)(j&0x0f);
s=(s*100)/16;
j=j>>4;
temper=i|j;                                      /*获取的温度放在temper中*/
}
北京大学研究生院/*====================================================================================================
Initialize PID Structure
=====================================================================================================*/
void PIDInit (struct PID *pp)蒸鸡胸肉
{
memt ( pp,0,sizeof(struct PID));
/*====================================================================================================
PID计算部分
=====================================================================================================*/
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )

本文发布于:2023-05-23 05:50:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/741413.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:调节   延时   子程序   开始
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图