📄 osc2_0929.lst
字号:
227 4 {
228 5 excursion_dir=0;
229 5 center_excursion=1;
230 5 }
231 4 }
232 3 }break;
233 2 case com_osc_r: {
234 3 if(work==0) //点动
235 3 {
236 4 if(osc_r==0)
237 4 osc_r=1;
238 4 }
239 3 else
240 3 {
241 4 if(center_excursion==0&&judge_ok==0)
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 5
242 4 {
243 5 excursion_dir=1;
244 5 center_excursion=1;
245 5 }
246 4 }
247 3 }break;
248 2
249 2 case com_breadth_add: if(osc_ok==1&&osc==0)
250 2 {
251 3 osc=1; //启动横摆
252 3 osc_change=1;
253 3 }break;
254 2 case com_breadth_dec: if(osc_ok==1&&osc==0)
255 2 {
256 3 osc=1; //启动横摆
257 3 osc_change=0;
258 3 }break;
259 2
260 2 case com_goto_begin: to_begin=1;break;
261 2 case com_err_ok: err_ok=1;break;
262 2 default: break;
263 2 }
264 1 }
265
266 void data_type() //对接收到的数据分辨类型
267 {
268 1 switch(rbuffer[1])
269 1 {
270 2 case command: com_type();break;
271 2 case infor: {
272 3 if(rbuffer[2]==com_sector)
273 3 {
274 4 in_sector=1;
275 4 new_sector=1;
276 4 nonce_sec=rbuffer[3];
277 4 K4=pp.x[nonce_sec][0];
278 4 }
279 3 }break;
280 2 case p_out_sec: receive_p_out=1;break;
281 2
282 2 case p_in_sec: {
283 3 nonce_sec=rbuffer[2];
284 3 receive_p_in=1;
285 3 }break;
286 2 default: break;
287 2 }
288 1 }
289
290
291 void EX0_INT (void) interrupt 0 //急停
292 {
293 1 EX0=0;
294 1 message_enable=1; //关发送使能
295 1 REN=1;
296 1 gate=0;
297 1 CTCON=CTCON&0xF0;
298 1
299 1 while(err_ok==0)
300 1 {
301 2 if(called==1)
302 2 {
303 3 if(osc_err==0)
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 6
304 3 {
305 4 ini_sbuf(M_main,answer,OK,0,0,0);
306 4 s_byte_nums=4;
307 4 TR_noans();
308 4 }
309 3 else
310 3 {
311 4 ini_sbuf(M_main,err_infor,M_OSC,err,0,0);
312 4 s_byte_nums=5;
313 4 TR_noans();
314 4 osc_err=0;
315 4 err=0;
316 4 stop=1;
317 4 }
318 3 called=0;
319 3 }
320 2 }
321 1 urgent_stop=1;
322 1 }
323
324 void EX1_INT (void) interrupt 2
325 {
326 1 unsigned char get_err;
327 1 EX1=0;
328 1 get_err=P5;
329 1 get_err=get_err&0x10;
330 1 if(get_err==0)
331 1 {
332 2 err=14; //横摆过流
333 2 write_8574(0xF4);
334 2 }
335 1 else
336 1 {
337 2 get_err=P5;
338 2 get_err=get_err&0x08;
339 2 if(get_err==0)
340 2 {
341 3 err=13; //横摆右限位
342 3 write_8574(0xF2);
343 3 }
344 2 else
345 2 {
346 3 get_err=P5;
347 3 get_err=get_err&0x04;
348 3 if(get_err==0)
349 3 {
350 4 err=12; //横摆左限位
351 4 write_8574(0xF1);
352 4 }
353 3 }
354 2 }
355 1 if(err!=0)
356 1 {
357 2 osc_err=1;
358 2 stop=0;
359 2 }
360 1 else
361 1 EX1=1;
362 1 }
363
364 void T1_INT (void) interrupt 3
365 {
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 7
366 1 c_t1++;
367 1 if(send==1)
368 1 {
369 2 if(c_t1==7)
370 2 {
371 3 S0BUF=sbuffer[POINTER0];
372 3 c_t1=0;
373 3 }
374 2 }
375 1 else
376 1 {
377 2 if(c_t1==100)
378 2 {
379 3 TR1=0;
380 3 overtime=1;
381 3 }
382 2 }
383 1 }
384
385 void TR_INT (void) interrupt 4 //串行口中断
386 { //关中断
387 1 if(TI==1) //发送完成
388 1 {
389 2 TI=0;
390 2 POINTER0++;
391 2 if(POINTER0<s_byte_nums-1)
392 2 SSUM=SSUM+sbuffer[POINTER0]; //6个数据字节求和
393 2 else
394 2 sbuffer[s_byte_nums-1]=SSUM+sbuffer[0]; //数据和加地址生成校验码
395 2 if(POINTER0==s_byte_nums)
396 2 REN=1;
397 2 }
398 1
399 1 if(RI==1) //接收完成
400 1 {
401 2 RI=0;
402 2 POINTER1++; //接收缓冲指针加1
403 2 rbuffer[POINTER1-1]=S0BUF; //从接收缓冲读出数据
404 2 if(rbuffer[0]==M_OSC||rbuffer[0]==M_ALL)
405 2 {
406 3 SM2=0;
407 3 if(POINTER1==2)
408 3 r_byte_nums=get_byte_nums(rbuffer[1]);
409 3 if(POINTER1<r_byte_nums)
410 3 RSUM=RSUM+rbuffer[POINTER1-1]; //生成校验码
411 3 else
412 3 {
413 4 SM2=1;
414 4 if(RSUM==rbuffer[r_byte_nums-1])
415 4 {
416 5 if(ans==0)
417 5 {
418 6 POINTER1=0;
419 6 RSUM=0;
420 6 }
421 5 S_ANSW=OK;
422 5 data_type();
423 5 }
424 4 else
425 4 {
426 5 POINTER1=0;
427 5 RSUM=0;
C51 COMPILER V7.06 OSC2_0929 03/27/2006 17:02:25 PAGE 8
428 5 S_ANSW=FAIL;
429 5 if(resend==0)
430 5 resend=1;
431 5 }
432 4 }
433 3
434 3 }
435 2 else
436 2 POINTER1=0;
437 2 } //开中断
438 1 }
439
440 void S1_int (void) interrupt 5 //I2C
441 {
442 1 if (S1STA==0x00)
443 1 {
444 2 FF=1;
445 2 S1CON=0xD5; //STA=0 STO=1 SI=0 AA=1
446 2 }
447 1 if (S1STA==0x08)
448 1 {
449 2 S1DAT=SLA;
450 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
451 2 }
452 1 if (S1STA==0x10)
453 1 {
454 2 S1DAT=SLA;
455 2 S1CON=0xC5; //STA=0 STO=0 SI=0 AA=1
456 2 }
457 1 if (S1STA==0x18)
458 1 {
459 2 S1DAT=COMM;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -