仓库温湿度的监测系统(8)

2019-04-08 19:40

#include 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;

/*延时子程序,延时时间以12M晶振为准,延时时间为30us×time */ void delay(unsigned char time) {

33

unsigned char m,n; for(n=0;n

/* 写一位数据子程序 */

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; /*移位操作,将本次要写的位移到最低位*/

34

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<

35

delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/ } EA=1;

return(value); }

/* 复位子程序 */ unsigned char reset() {

unsigned char presence; EA=0;

DQ=0; /*拉低DQ总线开始复位*/ delay(30); /*保持低电平480us*/ DQ=1; /*释放总线*/ delay(3);

presence=DQ; /*获取应答信号*/ delay(28); /*延时以完成整个时序*/ EA=1;

return(presence); /*返回应答信号,有芯片应答返回0,无芯片则返回1*/ }

/* 获取温度子程序 */ void get_temper() {

unsigned char i,j; do {

i=reset(); /*复位*/

}while(i!=0); /*1为无反馈信号*/ i=0xcc; /*发送设备定位命令*/ write_byte(i);

i=0x44; /*发送开始转换命令*/

36

write_byte(i); delay(180); /*延时*/ do {

i=reset(); /*复位*/ }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) {

memset ( pp,0,sizeof(struct PID)); }

/*==================================================================================================== PID计算部分

37


仓库温湿度的监测系统(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:你知道哪六类食物让孩子更聪明

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: