预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

我的题目是:基于PID算法的温度控制系统 89C51单片机,通过键盘输入预设值,与DS18B20测得的实际值做比较,然后驱动制冷或 加热电路。用keilC语言来实现PID的控制。 最佳答案 //PID算法温控C语言2008-08-1718:58 #include<reg51.h> #include<intrins.h> #include<math.h> #include<string.h> structPID{ unsignedintSetPoint;//设定目标DesiredValue unsignedintProportion;//比例常数ProportionalConst unsignedintIntegral;//积分常数IntegralConst unsignedintDerivative;//微分常数DerivativeConst unsignedintLastError;//Error[-1] unsignedintPrevError;//Error[-2] unsignedintSumError;//SumsofErrors }; structPIDspid;//PIDControlStructure unsignedintrout;//PIDResponse(Output) unsignedintrin;//PIDFeedback(Input) sbitdata1=P1^0; sbitclk=P1^1; sbitplus=P2^0; sbitsubs=P2^1; sbitstop=P2^2; sbitoutput=P3^4; sbitDQ=P3^3; unsignedcharflag,flag_1=0; unsignedcharhigh_time,low_time,count=0;//占空比调节参数 unsignedcharset_temper=35; unsignedchartemper; unsignedchari; unsignedcharj=0; unsignedints; /*********************************************************** 延时子程序,延时时间以12M晶振为准,延时时间为30us×time ***********************************************************/ voiddelay(unsignedchartime) { unsignedcharm,n; for(n=0;n<time;n++) for(m=0;m<2;m++){} } /*********************************************************** 写一位数据子程序 ***********************************************************/ voidwrite_bit(unsignedcharbitval) { EA=0; DQ=0;/*拉低DQ以开始一个写时序*/ if(bitval==1) { _nop_(); DQ=1;/*如要写1,则将总线置高*/ } delay(5);/*延时90us供DA18B20采样*/ DQ=1;/*释放DQ总线*/ _nop_(); _nop_(); EA=1; } /*********************************************************** 写一字节数据子程序 ***********************************************************/ voidwrite_byte(unsignedcharval) { unsignedchari; unsignedchartemp; 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;/*开中断*/ } /*********************************************************** 读一位数据子程序 ***********************************************************/ unsignedcharread_bit() { unsignedchari,value_bit; EA=0; DQ=0;/*拉低D