📄 e51pro.lst
字号:
266 #define T_K2 64 //K2按键按下后,IRD_LED发送的脉冲数
267 #define T_K3 96 //K3按键按下后,IRD_LED发送的脉冲数
268 #define T_K4 128 //K4按键按下后,IRD_LED发送的脉冲数
269
270 //成品板上 ISP_SL=0: ISP_MOD / ISP_SL=1:IRD_MOD
271 #define ISP_MOD 0
272 #define IRD_MOD 1
273
274 bit temp_ISP_SL=1;
275
276 bit temp_K1=1;
277 bit temp_K2=1;
278 bit temp_K3=1;
279 bit temp_K4=1;
280
281 BYTE t;
282
283 void main()
284 {
285 1 SP=0x60;
286 1 P3=0xff;
287 1
288 1 ISP_SL=1;
289 1 temp_ISP_SL = ISP_SL; //上电仅检测一次
290 1 if(temp_ISP_SL==0) //ISP_MOD LED常亮
291 1 {
292 2 ISP_LED = 0;
293 2 ISP_XY = ISP_MOD;
294 2
295 2 P1_4 = 0; //RST=1
296 2 Delay_ms(100);
297 2 P1_4 = 1;
298 2
299 2 // SetVpp5V();//先初始化Vpp为5v
300 2 SCON=0x00;
301 2 TCON=0x00;
302 2 //PCON=0x00;//波特率*2
C51 COMPILER V7.08 E51PRO 03/22/2008 06:47:24 PAGE 6
303 2 IE=0x00;
304 2 //TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
305 2 // 0 0 1 0 0 0 0 1
306 2 TMOD=0x21;//T0用于延时程序
307 2 TH1=0xff;
308 2 TL1=0xff;//波特率28800*2,注意PCON
309 2 //SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI
310 2 // 0 1 0 1 0 0 0 0
311 2 SCON=0x50;
312 2 TR1=1;
313 2 Delay_ms(1000);//延时1秒后编程器自举
314 2 ComBuf[0]=0;
315 2 SendData();
316 2 while(1)//串口通讯采用查询方式
317 2 {
318 3 if(!WaitComm())//如果超时,通讯出错
319 3 {
320 4 Delay_ms(500);
321 4 ComBuf[0]=0;//让编程器复位,使编程器就绪
322 4 }
323 3 switch(ComBuf[1])//根据FID设置(ProWork)pw中的函数指针
324 3 {
325 4 //K5i及AT89S51不需要,故注销
326 4 /*
327 4 case 0://at89c51编程器
328 4 PreparePro00();
329 4 break;
330 4 case 1://at89c2051编程器
331 4 PreparePro01();
332 4 break;
333 4 */
334 4 case 2://at89s51编程器
335 4 PreparePro02();
336 4 break;
337 4 //case 3:支持新器件时,请继续向下添加
338 4 // break;
339 4 //case 4:
340 4 // break;
341 4 default:
342 4 ComBuf[0]=0xff;
343 4 ComBuf[1]=0xff;//表示无效的操作
344 4 break;
345 4 }
346 3 switch(ComBuf[0])//根据操作ID跳到不同的操作函数
347 3 {
348 4 case 0x00:
349 4 RstPro();//编程器复位
350 4 break;
351 4 case 0x01:
352 4 ReadSign();//读特征字
353 4 break;
354 4 case 0x02:
355 4 Erase();//擦除器件
356 4 break;
357 4 case 0x03:
358 4 Write();//写器件
359 4 break;
360 4 case 0x04:
361 4 Read();//读器件
362 4 break;
363 4 case 0x05:
364 4 Lock();//写锁定位
C51 COMPILER V7.08 E51PRO 03/22/2008 06:47:24 PAGE 7
365 4 break;
366 4 default:
367 4 SendData();
368 4 break;
369 4 }
370 3 }
371 2 }
372 1
373 1 else //IRD_MOD
374 1 {
375 2 ISP_LED = 1;
376 2 ISP_XY = IRD_MOD;
377 2
378 2 IRD_K1=1;
379 2 IRD_K2=1;
380 2 IRD_K3=1;
381 2 IRD_K4=1;
382 2
383 2
384 2 while(1)
385 2 {
386 3 Delay_ms(500);
387 3 ISP_LED =~ISP_LED;
388 3 temp_K1=IRD_K1;
389 3 temp_K2=IRD_K2;
390 3 temp_K3=IRD_K3;
391 3 temp_K4=IRD_K4;
392 3 //按键K1处理
393 3 if(temp_K1==0)
394 3 {
395 4 ISP_LED = 0;
396 4 IRD_LED = 1;
397 4 Delay_ms(10);
398 4 temp_K1=IRD_K1;
399 4 if(temp_K1==0) //10ms延时去抖
400 4
401 4 {for(t=1;t<=T_K1;t++)
402 5 {
403 6 IRD_LED = ~IRD_LED;
404 6 Delay_us(1);
405 6 }
406 5 }
407 4
408 4 temp_K1=IRD_K1;
409 4 while(temp_K1==0)//查询按键有没有松开
410 4 {temp_K1=IRD_K1;}
411 4 IRD_LED=1;
412 4 ISP_LED=1;
413 4 }
414 3
415 3 //按键K2处理
416 3 if(temp_K2==0)
417 3 {
418 4 ISP_LED = 0;
419 4 IRD_LED = 1;
420 4 Delay_ms(10);
421 4 temp_K2=IRD_K2;
422 4 if(temp_K2==0) //10ms延时去抖
423 4
424 4 {for(t=1;t<=T_K2;t++)
425 5 {
426 6 IRD_LED = ~IRD_LED;
C51 COMPILER V7.08 E51PRO 03/22/2008 06:47:24 PAGE 8
427 6 Delay_us(1);
428 6 }
429 5 }
430 4
431 4 temp_K2=IRD_K2;
432 4 while(temp_K2==0)//查询按键有没有松开
433 4 {temp_K2=IRD_K2;}
434 4 IRD_LED=1;
435 4 ISP_LED=1;
436 4 }
437 3
438 3 ///按键K3处理
439 3 if(temp_K3==0)
440 3 {
441 4 ISP_LED = 0;
442 4 IRD_LED = 1;
443 4 Delay_ms(10);
444 4 temp_K3=IRD_K3;
445 4 if(temp_K3==0) //10ms延时去抖
446 4
447 4 {for(t=1;t<=T_K3;t++)
448 5 {
449 6 IRD_LED = ~IRD_LED;
450 6 Delay_us(1);
451 6 }
452 5 }
453 4
454 4 temp_K3=IRD_K3;
455 4 while(temp_K3==0)//查询按键有没有松开
456 4 {temp_K3=IRD_K3;}
457 4 IRD_LED=1;
458 4 ISP_LED=1;
459 4 }
460 3
461 3 //按键K1处理
462 3 if(temp_K4==0)
463 3 {
464 4 ISP_LED = 0;
465 4 IRD_LED = 1;
466 4 Delay_ms(10);
467 4 temp_K4=IRD_K4;
468 4 if(temp_K4==0) //10ms延时去抖
469 4
470 4 {for(t=1;t<=T_K4;t++)
471 5 {
472 6 IRD_LED = ~IRD_LED;
473 6 Delay_us(1);
474 6 }
475 5 }
476 4
477 4 temp_K4=IRD_K4;
478 4 while(temp_K4==0)//查询按键有没有松开
479 4 {temp_K4=IRD_K4;}
480 4 IRD_LED=1;
481 4 ISP_LED=1;
482 4 }
483 3 //查询按键完毕
484 3 }
485 2 }
486 1 }
487
488
C51 COMPILER V7.08 E51PRO 03/22/2008 06:47:24 PAGE 9
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _Delay_us (BEGIN)
; SOURCE LINE # 30
;---- Variable 'nUs' assigned to Register 'R7' ----
; SOURCE LINE # 31
; SOURCE LINE # 32
0000 E4 CLR A
0001 F58C MOV TH0,A
; SOURCE LINE # 33
0003 F58A MOV TL0,A
; SOURCE LINE # 34
0005 D28C SETB TR0
0007 ?C0001:
; SOURCE LINE # 35
0007 E58A MOV A,TL0
0009 C3 CLR C
000A 9F SUBB A,R7
000B 40FA JC ?C0001
; SOURCE LINE # 36
; SOURCE LINE # 37
000D ?C0002:
; SOURCE LINE # 38
000D C28C CLR TR0
; SOURCE LINE # 39
000F 22 RET
; FUNCTION _Delay_us (END)
; FUNCTION _Delay_ms (BEGIN)
; SOURCE LINE # 41
;---- Variable 'nMs' assigned to Register 'R6/R7' ----
; SOURCE LINE # 42
; SOURCE LINE # 43
;---- Variable 'n' assigned to Register 'R4/R5' ----
0000 E4 CLR A
0001 FD MOV R5,A
0002 FC MOV R4,A
; SOURCE LINE # 44
0003 D28C SETB TR0
0005 ?C0004:
; SOURCE LINE # 45
0005 C3 CLR C
0006 ED MOV A,R5
0007 9F SUBB A,R7
0008 EC MOV A,R4
0009 9E SUBB A,R6
000A 5014 JNC ?C0005
; SOURCE LINE # 46
; SOURCE LINE # 47
000C E4 CLR A
000D F58C MOV TH0,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -