📄 metic.lst
字号:
C51 COMPILER V7.50 METIC 09/17/2006 13:21:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE METIC
OBJECT MODULE PLACED IN metic.OBJ
COMPILER INVOKED BY: D:\SProgram\Keil\C51\BIN\C51.EXE metic.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "TempCtrl.h"
2 uint kf=0;
3 void SamplingProcess()
4 {
5 1 //频率->电阻
6 1
7 1 k1=TpTH0<<8;
8 1 k1+=TpTL0;//k1:freq
9 1 //校准处理
10 1 k2=Read(EP_FF);
11 1
12 1 if((AdmitFlag==2)||((KeySta & 0x06)==0x06))
13 1 switch(k2)
14 1 {
15 2
16 2 case 1000:
17 2 case 1001:
18 2 case 1002:
19 2 case 1003:
20 2 case 1004:
21 2 case 1005:
22 2 case 1006:
23 2 case 1007:
24 2 AdmitFlag=3;
25 2 break;
26 2 case 1://显示电阻大小
27 2 AdmitFlag=4;
28 2 break;
29 2
30 2 default:
31 2 ;
32 2 }
33 1
34 1 if((AdmitFlag==2))
35 1 {
36 2 Led(k1);
37 2 LedBuf[0]=LedCode[C_F];
38 2 }
39 1 if((AdmitFlag==3))
40 1 {
41 2 Led(k1);
42 2 LedBuf[0]=LedCode[C_H];
43 2 }
44 1
45 1 //频率-->电阻
46 1 //k1=TpTH0<<8;
47 1 //k1+=TpTL0;//k1:freq
48 1
49 1 // kf+=500;
50 1 // k1=kf;
51 1
52 1 for(i=0;i<5;i++)//(6-1)次即可
53 1 if(k1>Fr[i])
54 1 break;
55 1 if(i<5) //x1=(Rx-100)*100
C51 COMPILER V7.50 METIC 09/17/2006 13:21:24 PAGE 2
56 1 {
57 2 x2=(float)(k1-Fr[i]);
58 2 x2=3000*x2;
59 2 x3=(float)(Fr[i+1]-Fr[i]);
60 2 x2=x2/x3;
61 2 x1=3000*i+x2;//3000*i+(k1-Fr[i])*3000/(Fr[i+1]-Fr[i]); //100*
62 2 }
63 1 else
64 1 {
65 2 x2=(float)(k1-Fr[i]);
66 2 x2=3000*x2;
67 2 x3=(float)(Fr[5]-Fr[4]);
68 2 x2=x2/x3;
69 2 x1=15000+x2;//15000+(k1-Fr[5])*3000/(Fr[5]-Fr[4]);//
70 2 }
71 1
72 1 x1+=0.5;
73 1 k0=(unsigned int)x1;
74 1
75 1 ///{{
76 1 // Led(k0);
77 1 /// LedBuf[5]+=128;
78 1 // LedBuf[0]=LedCode[C_r];
79 1 ///}}
80 1
81 1 if(AdmitFlag==4)
82 1 {
83 2 k3=k0+10000;
84 2 Led(k3);//Rx=x1+100
85 2 LedBuf[5]+=128;
86 2 LedBuf[0]=LedCode[C_r];
87 2 }
88 1 //电阻->频率
89 1 k3=80;//k1:low,k2:mid,k3:hig
90 1 k1=0;
91 1 while(k3-k1>1)
92 1 {
93 2 k2=(k1+k3)>>1;
94 2 if(k0<Pt100_R2T[k2])
95 2 k3=k2;
96 2 else
97 2 {
98 3 k1=k2;
99 3 if(k0==Pt100_R2T[k2])
100 3 break;
101 3 }
102 2 }
103 1 //k1为所在表中的温度位置
104 1 if(k1<79)
105 1 Temperature=50*k1+(k0-Pt100_R2T[k1])*50/(Pt100_R2T[k1+1]-Pt100_R2T[k1]);
106 1 else
107 1 Temperature=50*79+(k0-Pt100_R2T[79])*50/(Pt100_R2T[79]-Pt100_R2T[78]);
108 1
109 1
110 1 if(AdmitFlag==1)
111 1 {
112 2 LedH(Temperature);
113 2 DPA();
114 2 LedL(Setted_Temperature);
115 2 DPB();
116 2 }
117 1
C51 COMPILER V7.50 METIC 09/17/2006 13:21:24 PAGE 3
118 1 k0=Read(EP_SH);
119 1 k1=Read(EP_SL);
120 1 if((Temperature>k0)||(Temperature<k1))
121 1 {
122 2 ALM_ON();
123 2 ALM_OUT=0;//警报接通
124 2 }
125 1 else
126 1 {
127 2 ALM_OFF();
128 2 ALM_OUT=1;//警报停止
129 2 }
130 1
131 1 ///控制算法
132 1 // PreError=LastError;
133 1 // LastError=Error;
134 1 Error=Setted_Temperature-Temperature;
135 1 //dError=Error-LastError;
136 1
137 1 //PidOutput=Kp*
138 1 //PidOutput范围-100~0~+100,每次趋于0
139 1 if(MeterSta!=STA_MAN)
140 1 {
141 2 //delta U(k)=Ae(k)-Be(k-1)+Ce(k-2)
142 2 //k1=Kp,k2=
143 2 if(Error>10 || Error<-10)//偏差大于1度时动作
144 2 {
145 3 /* k1=Read(EP_P);//Kp
146 3
147 3 x1=Read(EP_I);
148 3 k2=x1/10.0;//Ti
149 3 x1=Read(EP_d);
150 3 k3=x1/10.0;//Td
151 3
152 3 x2=(float)k2;
153 3 x2=1.0/x2;
154 3 x1=1+x2+k3;//Kp(1+T/Ti+Td/T);//A
155 3 x1=x1*Error;
156 3
157 3 x2=-1-2.0*k3;//Kp(1+2*Td/T)//B
158 3 x2=x2*LastError;
159 3
160 3 x3=k3; //Kp*Td/T//C
161 3 x3=x3*PreError;
162 3
163 3 x1=x1+x2+x3;
164 3 x1=x1*k1/1000.0;
165 3 */
166 3 //Output=x1;
167 3 }
168 2 // else if()//用这种形式分段
169 2 // {
170 2
171 2 // }
172 2 Output=Error;
173 2 if(Output>0)
174 2 {
175 3 PosOutput();
176 3 }
177 2 else if(Output<0)
178 2 {
179 3 PosOutput()
C51 COMPILER V7.50 METIC 09/17/2006 13:21:24 PAGE 4
180 3 }
181 2 else
182 2 {
183 3 OffOutput();
184 3 }
185 2 }
186 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1083 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -