📄 subprogram.lst
字号:
199 void da(uint16 temp,uint8 channel)
200 {
201 1 if(channel==0)
202 1 {
203 2 DAC0L=temp&0xff;
204 2 DAC0H=(temp>>8)&0xff;
205 2 DAC0CN=0x80;
206 2 }
207 1 else
208 1 {
209 2 DAC1L=temp&0xff;
210 2 DAC1H=(temp>>8)&0xff;
211 2 DAC1CN=0x80;
212 2 }
213 1 }
214 /*********************************************************************************************************
215 ** 函数名称: midst
216 ** 功能描述: 求中间值 返回中间值
217 ** 输 入: pbuf被处理数据区首地址,width:被处理数据区宽度
218 ** 输 出: 中间值
219 ** 全局变量: 无
220 ** 调用模块: 无
221 **
222 ** 作 者: 刘宝贵
223 ** 日 期: 2004年4月19日
224 **-------------------------------------------------------------------------------------------------------
225 ** 修改人:
226 ** 日 期:
227 **-------------------------------------------------------------------------------------------------------
228 *********************************************************************************************************/
229 uint16 midst(uint16 *pbuf, uint8 width)
230 {
231 1 int8 m, n;
232 1 uint16 itemp;
233 1 uint16 xdata buf[10];
234 1 for (m = 0; m < width; m++)
235 1 {
236 2 buf[m] = pbuf[m];
237 2 }
238 1 for (m = 0; m < width; m++)
239 1 {
240 2 for ( n = m - 1; n >= 0; n--)
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 5
241 2 {
242 3 if (buf[n+1] > buf[n])
243 3 {
244 4 itemp = buf[n];
245 4 buf[n] = buf[n+1];
246 4 buf[n+1] = itemp;
247 4 }
248 3 }
249 2 }
250 1 itemp = buf[width/2];
251 1 itemp+= buf[width/2-1];
252 1 itemp+= buf[width/2+1];
253 1 // itemp/=3;
254 1 return itemp;
255 1 // return buf[width/2];
256 1 }
257 /*********************************************************************************************************
258 ** 函数名称: ClearDA
259 ** 功能描述: 将系统DA置0
260 ** 输 入: 无
261 ** 输 出: 无
262 ** 全局变量: DAUBuf DAIBuf
263 ** 调用模块:
264 **
265 ** 作 者: 刘宝贵
266 ** 日 期: 2004年5月17日
267 **-------------------------------------------------------------------------------------------------------
268 ** 修改人:
269 ** 日 期:
270 **-------------------------------------------------------------------------------------------------------
271 *********************************************************************************************************/
272 void ClearDA(void)
273 {
274 1 uint8 data i;
275 1 for(i=0;i<24;i++)
276 1 {
277 2 DAUBuf[i]=0;
278 2 DAIBuf[i]=0;
279 2 }
280 1 }
281 /*********************************************************************************************************
282 ** 函数名称: WorkStepInit
283 ** 功能描述: 工步初始化:设置Cell[i].c,Cell[i].t,Cell[i].s,Second
284 ** 输 入: 无
285 ** 输 出: 无
286 ** 全局变量: Cell[i].c,Cell[i].t,Cell[i].s,Second Reset
287 ** 调用模块:
288 **
289 ** 作 者: 刘宝贵
290 ** 日 期: 2004年5月17日
291 **-------------------------------------------------------------------------------------------------------
292 ** 修改人:
293 ** 日 期:
294 **-------------------------------------------------------------------------------------------------------
295 *********************************************************************************************************/
296 void WorkStepInit(uint8 type)
297 {
298 1 uint8 data i;
299 1 if(Reset==0)
300 1 {
301 2 for(i=0;i<24;i++)
302 2 {
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 6
303 3 OS_ENTER_CRITICAL();
304 3 if(type !=STOP)
305 3 {
306 4 Cell[i].c=0;
307 4 }
308 3 Cell[i].t=0;
309 3 Cell[i].s=type;
310 3 OS_EXIT_CRITICAL();
311 3 }
312 2 Second = 0;
313 2 }
314 1 else
315 1 {
316 2 Reset = 0;
317 2 }
318 1 }
319 /*********************************************************************************************************
320 ** 函数名称: WorkStepCheck
321 ** 功能描述: 工步合法性检查
322 ** 输 入: 无
323 ** 输 出: work_step_lawful 1:合法 0:非法
324 ** 全局变量: SumWorkStep CurrentWorkStep WorkStep[]
325 ** 调用模块: 无
326 **
327 ** 作 者: 刘宝贵
328 ** 日 期: 2004年5月25日
329 **-------------------------------------------------------------------------------------------------------
330 ** 修改人:
331 ** 日 期:
332 **-------------------------------------------------------------------------------------------------------
333 *********************************************************************************************************/
334 bit WorkStepCheck(void)
335 {
336 1 uint8 data i;
337 1 bit work_step_lawful = 1; //工步是否合法
338 1 if(CurrentWorkStep > SumWorkStep || SumWorkStep > 12 )
339 1 work_step_lawful = 0;
340 1 if(WorkStep[SumWorkStep].type !=STOP)
341 1 work_step_lawful = 0;
342 1 for(i=1;i<=SumWorkStep;i++)
343 1 {
344 2 switch (WorkStep[i].type)//检测本工步是否有效
345 2 {
346 3 case 0://停止
347 3 {
348 4 _nop_();
349 4 }break;
350 3 case 1://静止
351 3 {
352 4 if(WorkStep[i].i > 0 || WorkStep[i].t>20*60 || WorkStep[i].t<1*60 )
353 4 {
354 5 work_step_lawful=0;
355 5 }
356 4 }break;
357 3 case 2://充电
358 3 {
359 4 if( WorkStep[i].i > 30000 || WorkStep[i].i < 200
360 4 ||WorkStep[i].limit > 300 || WorkStep[i].limit < 50
361 4 ||WorkStep[i].t > 360*60 || WorkStep[i].t < 1*60
362 4 ||WorkStep[i].u > 42000 || WorkStep[i].u < 500
363 4 )
364 4 {
C51 COMPILER V7.06 SUBPROGRAM 06/06/2005 16:32:37 PAGE 7
365 5 work_step_lawful=0;
366 5 }
367 4 }break;
368 3 case 3://放电
369 3 {
370 4 if( WorkStep[i].i > 30000 || WorkStep[i].i < 300
371 4 ||WorkStep[i].limit > 41000 || WorkStep[i].limit< 23000
372 4 ||WorkStep[i].t > 120*60 || WorkStep[i].t < 1*60)
373 4 {
374 5 work_step_lawful=0;
375 5 }
376 4 }break;
377 3 }
378 2 }
379 1 if(work_step_lawful==0)//如果工步违法,则初始化工步。
380 1 {
381 2 CurrentWorkStep = 0;
382 2 SumWorkStep = 1;
383 2 WorkStep[1].type = STOP;
384 2 return(0);
385 2 }
386 1 else
387 1 {
388 2 return(1);
389 2 }
390 1 }
391
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2505 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 28
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -