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