📄 admain.lst
字号:
282 4 }
283 3 else
284 3 {
285 4 SetDac(0,0x0000);
286 4 for(i=0;i<20;i++) { temp_s[i]=0x00;}
287 4 }
288 3 }
289 2 else
290 2 {
291 3 Calcu(0);
292 3 if(flag_s==1)
293 3 {
294 4 for(i=19;i>0;i--) { temp_s[i]=temp_s[i-1];}
295 4 temp_s[0]=Da_i[0];
296 4 flag_s=0;
297 4 if((j&0x80)!=0) temp_t++;
298 4 //if((temp_t>=0x64)&&((flag_u&0x01)==0x01))
299 4 if(temp_t>=0x64)
300 4 {
301 5 Write_Serial(Ad_o[0]); //test zhy
302 5 while(flag){;}
303 5 Write_Serial(Da_i[0]);
C51 COMPILER V7.10 ADMAIN 06/05/2006 09:59:57 PAGE 6
304 5 temp_t=0;
305 5 }
306 4 }
307 3 }
308 2 //-----------------------
309 2 if((time_p==0)&&(flag1>0))
310 2 {
311 3 flag1=0x00;
312 3 W_Uart("uart err",8);
313 3 Rptr=Wptr=0x00;
314 3 }
315 2 //-----------------------
316 2 if(Rptr!=Wptr)
317 2 {
318 3 time_p=0x80;
319 3 k=DATA_U[Rptr];
320 3 Rptr++;
321 3 if(Rptr>=64) {Rptr=0;}
322 3 switch(flag1)
323 3 {
324 4 case 0: //0xaa 头 下载
325 4 if(k==0xaa) {flag1=0x01;}
326 4 else if(k==0xbb){flag1=0x10;}
327 4 else if(k==0xcc)
328 4 {
329 5 for(i=0;i<20;i++)
330 5 {
331 6 Write_Serial(temp_s[i]); //test zhy
332 6 while(flag){;}
333 6 }
334 5 /*EADRL=0x40;
335 5 ECON=0x01; //按页擦
336 5 EDATA1=0x00;
337 5 EDATA2=0x00;
338 5 EDATA3=0xcc;
339 5 EDATA4=0xcc;
340 5 ECON=0x05; //按页擦
341 5 ECON=0x02;
342 5 EADRL=0x9f; // 最后一页
343 5 j=0;
344 5 W_Uart("ok" ,2);
345 5 Rptr=Wptr=0x00;
346 5 */
347 5 }
348 4 else if(k==0xcd){flag1=0x20;}
349 4 break;
350 4 case 1:
351 4 if(k>0x00) //长度
352 4 {
353 5 flag1=0x02;
354 5 len_r=k;
355 5 if(len_r>60) {len_r=60;}
356 5 count=0x00;
357 5 Addr_P=Rptr;
358 5 }
359 4 else
360 4 {flag1=0x00;}
361 4 break;
362 4 case 2: //等待消息结束长度
363 4 count++;
364 4 if(count==len_r){flag1=0x03;}
365 4
C51 COMPILER V7.10 ADMAIN 06/05/2006 09:59:57 PAGE 7
366 4 break;
367 4 case 3: //数据下载完成 写消息
368 4 Write_f(0x00,0x00); //擦除flash
369 4 Rptr=Addr_P;
370 4 count=len_r/4;
371 4 for(i=0;i<count;i++)
372 4 {
373 5 EADRL=i;
374 5 // ECON=0x01; //按页读
375 5 EDATA1=DATA_U[Rptr];
376 5 EDATA2=DATA_U[Rptr+1];
377 5 EDATA3=DATA_U[Rptr+2];
378 5 EDATA4=DATA_U[Rptr+3];
379 5 // ECON=0x05; //按页擦
380 5 ECON=0x02;
381 5 EADRL=0x9F; // 最后一页
382 5 Rptr=Rptr+4;
383 5
384 5 }
385 4 len_r=0;
386 4 Addr_P=0;
387 4 flag1=0x00;
388 4 Rptr=Wptr=0x00;
389 4 W_Uart("down ok" ,7);
390 4 break;
391 4 case 0x10: //读frlash数据
392 4 flag1=0x00;
393 4 Rptr=Wptr=0x00;
394 4 len_r=0;
395 4 for(i=0;i<65;i++)
396 4 {
397 5 EADRL=i;
398 5 ECON=0x01;
399 5 Seg.V_start= EDATA1;
400 5 Seg.V_end = EDATA2;
401 5 Seg.mul_col= EDATA3;
402 5 Seg.add_col= EDATA4;
403 5 while(flag){;}
404 5 W_Uart((unsigned char*)&Seg ,4);
405 5 }
406 4 break;
407 4 case 0x20:
408 4 {
409 5 flag1=0x00;
410 5 EADRL=0x40;
411 5 ECON=0x01; //按页读
412 5 EDATA1=k;
413 5 EDATA2=0x0f;
414 5 EDATA3=0xcd;
415 5 EDATA4=0xcd;
416 5 ECON=0x05; //按页擦
417 5 ECON=0x02;
418 5 EADRL=0x41; // 最后一页
419 5 j=k;
420 5 W_Uart("ok" ,2);
421 5 Rptr=Wptr=0x00;
422 5 }
423 4 }
424 3
425 3 }
426 2
427 2 }
C51 COMPILER V7.10 ADMAIN 06/05/2006 09:59:57 PAGE 8
428 1
429 1 }
430
431
432
433
434 void S_int0() interrupt 0
435 {
436 1
437 1 }
438
439 void S_int1() interrupt 2
440 {
441 1
442 1 }
443
444 void Time0() interrupt 1
445 {
446 1 TL0=0xFF;
447 1 TH0=0xDB; //TH0=0xDB; //设定定时器初值
448 1 TR0=1; //停止计数
449 1 if(time_r>0){time_r--;flag_s=1;}
450 1 if(time_p>0){ time_p--;}
451 1 // flag_s=1;
452 1 }
453
454
455 void Uart_isr() interrupt 4
456 {
457 1 // unsigned char R_Data;
458 1 EA=0;
459 1 if(RI)
460 1 {
461 2 RI=0;
462 2 DATA_U[Wptr]=SBUF;
463 2 Wptr++;
464 2 if(Wptr>=64) Wptr=0;
465 2 }
466 1 if(TI)
467 1 {
468 2 TI=0;
469 2 if((Uptr<Ulen) && (flag==0x01))
470 2 {
471 3 SBUF=DATA_W[Uptr];
472 3 Uptr++;
473 3 }
474 2 else
475 2 {
476 3 flag=0;
477 3 }
478 2 }
479 1
480 1 EA=1;
481 1 }
C51 COMPILER V7.10 ADMAIN 06/05/2006 09:59:57 PAGE 9
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _GetADC (BEGIN)
; SOURCE LINE # 41
;---- Variable 'Channel' assigned to Register 'R7' ----
; SOURCE LINE # 42
; SOURCE LINE # 47
0000 7B00 MOV R3,#00H
0002 7A00 R MOV R2,#HIGH ADC_value
0004 7900 R MOV R1,#LOW ADC_value
;---- Variable 'p' assigned to Register 'R1/R2/R3' ----
; SOURCE LINE # 48
0006 8FD8 MOV ADCCON2,R7
; SOURCE LINE # 49
0008 D2DC SETB SCONV
000A ?C0001:
; SOURCE LINE # 50
000A 20DCFD JB SCONV,?C0001
; SOURCE LINE # 51
000D ?C0002:
; SOURCE LINE # 52
000D D2DC SETB SCONV
000F ?C0003:
; SOURCE LINE # 53
000F 20DCFD JB SCONV,?C0003
; SOURCE LINE # 54
0012 ?C0004:
; SOURCE LINE # 55
0012 E5DA MOV A,ADCDATAH
0014 540F ANL A,#0FH
;---- Variable 'variable' assigned to Register 'R7' ----
; SOURCE LINE # 56
0016 120000 E LCALL ?C?CSTPTR
; SOURCE LINE # 57
0019 7401 MOV A,#01H
001B 29 ADD A,R1
001C F9 MOV R1,A
001D E4 CLR A
001E 3A ADDC A,R2
001F FA MOV R2,A
; SOURCE LINE # 58
0020 E5D9 MOV A,ADCDATAL
0022 120000 E LCALL ?C?CSTPTR
; SOURCE LINE # 60
0025 AE00 R MOV R6,ADC_value
0027 AF00 R MOV R7,ADC_value+01H
; SOURCE LINE # 61
0029 ?C0005:
0029 22 RET
; FUNCTION _GetADC (END)
; FUNCTION _SetDac (BEGIN)
; SOURCE LINE # 63
;---- Variable 'Da_data' assigned to Register 'R4/R5' ----
;---- Variable 'num' assigned to Register 'R7' ----
; SOURCE LINE # 64
; SOURCE LINE # 65
0000 EF MOV A,R7
0001 700C JNZ ?C0006
; SOURCE LINE # 66
; SOURCE LINE # 67
C51 COMPILER V7.10 ADMAIN 06/05/2006 09:59:57 PAGE 10
0003 75FD1F MOV DACCON,#01FH
; SOURCE LINE # 68
0006 EC MOV A,R4
0007 540F ANL A,#0FH
0009 F5FA MOV DAC0H,A
; SOURCE LINE # 69
000B ED MOV A,R5
000C F5F9 MOV DAC0L,A
; SOURCE LINE # 70
000E 22 RET
000F ?C0006:
; SOURCE LINE # 71
000F BF010B CJNE R7,#01H,?C0009
; SOURCE LINE # 72
; SOURCE LINE # 73
0012 75FD1F MOV DACCON,#01FH
; SOURCE LINE # 74
0015 EC MOV A,R4
0016 540F ANL A,#0FH
0018 F5FC MOV DAC1H,A
; SOURCE LINE # 75
001A ED MOV A,R5
001B F5FB MOV DAC1L,A
; SOURCE LINE # 76
; SOURCE LINE # 77
001D ?C0009:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -