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