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