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