📄 avc2.lst
字号:
234 2 avc_down=1;break;
235 2 case com_stop_avc: stop_avc=1;break;
236 2 case com_pgj: pgj=1;break;
237 2 case com_lift: lift=1;break;
238 2 case com_goto_begin: to_begin=1;break;
239 2 case com_need_para: if(need_para==0)
240 2 need_para=1;break;
241 2 case com_ask_lift_ok: ask_lift_ok=1;break;
C51 COMPILER V7.06 AVC2 06/29/2005 10:04:08 PAGE 5
242 2 case com_lift_ok: lift_ok=1;break;
243 2 case com_err_ok: err_ok=1;break;
244 2 default: break;
245 2 }
246 1 }
247
248 void data_type() //对接收到的数据分辨类型
249 {
250 1 switch(rbuffer[1])
251 1 {
252 2 case command: com_type();break;
253 2 // case answer: R_ANSW=rbuffer[1];break;
254 2 case infor: if(rbuffer[2]==com_sector)
255 2 {
256 3 in_sector=1;
257 3 new_sector=1;
258 3 nonce_sec=rbuffer[3];
259 3 }break;
260 2 case p_out_sec: receive_p_out=1;break;
261 2
262 2 case p_in_sec: {
263 3 nonce_sec=rbuffer[2];
264 3 receive_p_in=1;
265 3 }break;
266 2 default: break;
267 2 }
268 1 }
269
270
271 void EX0_INT (void) interrupt 0 //急停
272 {
273 1 EX0=0;
274 1 message_enable=1; //关发送使能
275 1 gate=0;
276 1 externel_voltage=0;
277 1 AD1=0;
278 1 AD2=0;
279 1 AD3=0;
280 1 AD4=0;
281 1 AD5=0;
282 1 U51=0;
283 1 while(err_ok==0)
284 1 {
285 2 if(called==1)
286 2 {
287 3 if(avc_err==0)
288 3 {
289 4 ini_sbuf(M_main,answer,OK,0,0,0);
290 4 s_byte_nums=4;
291 4 TR_noans();
292 4 }
293 3 else
294 3 {
295 4 ini_sbuf(M_main,err_infor,M_AVC,err,0,0);
296 4 s_byte_nums=5;
297 4 TR_noans();
298 4 avc_err=0;
299 4 err=0;
300 4 stop=1;
301 4 }
302 3 called=0;
303 3 }
C51 COMPILER V7.06 AVC2 06/29/2005 10:04:08 PAGE 6
304 2 }
305 1 urgent_stop=1;
306 1 }
307
308 void EX1_INT (void) interrupt 2
309 {
310 1 unsigned char get_err;
311 1 EX1=0;
312 1 get_err=P5;
313 1 get_err=get_err&0x04;
314 1 if(get_err==0)
315 1 err=15;
316 1 else
317 1 {
318 2 get_err=P5;
319 2 get_err=get_err&0x08;
320 2 if(get_err==0)
321 2 err=16;
322 2 else
323 2 {
324 3 get_err=P5;
325 3 get_err=get_err&0x10;
326 3 if(get_err==0)
327 3 err=17;
328 3 else
329 3 {
330 4 get_err=P5;
331 4 get_err=get_err&0x80;
332 4 if(get_err==0)
333 4 err=18;
334 4 }
335 3 }
336 2 }
337 1 if(err!=0)
338 1 {
339 2 avc_err=1;
340 2 stop=0;
341 2 }
342 1 else
343 1 EX1=1;
344 1 }
345 void T1_INT (void) interrupt 3
346 {
347 1 c_t1++;
348 1 if(send==1)
349 1 {
350 2 if(c_t1==7)
351 2 {
352 3 S0BUF=sbuffer[POINTER0];
353 3 c_t1=0;
354 3 }
355 2 }
356 1 else
357 1 {
358 2 if(c_t1==100)
359 2 {
360 3 TR1=0;
361 3 overtime=1;
362 3 }
363 2 }
364 1 }
365
C51 COMPILER V7.06 AVC2 06/29/2005 10:04:08 PAGE 7
366 void TR_INT (void) interrupt 4 //串行口中断
367 { //关中断
368 1 if(TI==1) //发送完成
369 1 {
370 2 TI=0;
371 2 POINTER0++;
372 2 if(POINTER0<s_byte_nums-1)
373 2 SSUM=SSUM+sbuffer[POINTER0]; //6个数据字节求和
374 2 else
375 2 sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
376 2 if(POINTER0==s_byte_nums)
377 2 REN=1;
378 2 }
379 1
380 1 if(RI==1) //接收完成
381 1 {
382 2 RI=0;
383 2 POINTER1++; //接收缓冲指针加1
384 2 rbuffer[POINTER1-1]=S0BUF; //从接收缓冲读出数据
385 2 if(rbuffer[0]==M_AVC||rbuffer[0]==M_ALL||rbuffer[0]==M_AVC_P)
386 2 {
387 3 SM2=0;
388 3 if(POINTER1==2)
389 3 r_byte_nums=get_byte_nums(rbuffer[1]);
390 3 if(POINTER1<r_byte_nums)
391 3 RSUM=RSUM+rbuffer[POINTER1-1]; //生成校验码
392 3 else
393 3 {
394 4 SM2=1;
395 4 if(RSUM==rbuffer[r_byte_nums-1])
396 4 {
397 5 if(ans==0)
398 5 {
399 6 POINTER1=0;
400 6 RSUM=0;
401 6 }
402 5 S_ANSW=OK;
403 5 data_type();
404 5 }
405 4 else
406 4 {
407 5 S_ANSW=FAIL;
408 5 if(resend==0)
409 5 resend=1;
410 5 }
411 4 }
412 3
413 3 }
414 2 else
415 2 POINTER1=0;
416 2 } //开中断
417 1 }
418
419 void CT0_int (void) interrupt 6
420 {
421 1 CTI0=0;
422 1 CTCON=CTCON&0xFC;
423 1 gate=0;
424 1 if(decrease==0&&pp.k5==ON)
425 1 {
426 2 if(pp.k1==DC||(pp.k1==PDC&&pp.avc_type==SP&&pulse_base==1))//(pp.avc_type==SP&&pulse_base==1||pp.avc_typ
-e==SPB||pp.avc_type==SB&&pulse_base==0)))
C51 COMPILER V7.06 AVC2 06/29/2005 10:04:08 PAGE 8
427 2 CTCON=CTCON|0x20;
428 2 }
429 1 if(decrease==1&&lift==1) //衰减过程
430 1 {
431 2 avc_enable=1; //关弧长使能
432 2 IEN1=IEN1&0XFE; //禁止CT0
433 2 lift_complete=1;
434 2 }
435 1 }
436
437 void CT2_int (void) interrupt 8 //电压采样保持脉冲
438 {
439 1 CTI2=0;
440 1 CTCON=CTCON&0xCF;
441 1 if(decrease==0)
442 1 {
443 2 // IEN1=IEN1&0XFB; //禁止CT2
444 2 ad_finish=0; //AD转换及处理过程
445 2 ADCON=0X08; //启动AD采样
446 2 }
447 1 }
448
449 void CT3_int (void) interrupt 9 //电流脉冲
450 {
451 1 CTI3=0;
452 1 pulse_base=~pulse_base;
453 1 CTCON=CTCON&0X3F;
454 1
455 1 if(avc_ok==0) //开始弧长
456 1 {
457 2 if(pp.avc_type==SB)
458 2 temp_avc=temp_u51_b;
459 2 else
460 2 temp_avc=temp_u51_p;
461 2 avc_ok=1;
462 2 CTCON=CTCON|0x20; //CT2下降沿
463 2 IEN1=IEN1|0X04; //允许CT2,采样保持脉冲
464 2 }
465 1 else
466 1 {
467 2 if(pp.avc_type==SP)
468 2 {
469 3 if(pulse_base==0) //进入基值
470 3 {
471 4 gate=0;
472 4 CTCON=CTCON&0xCF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -