⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 e51pro.lst

📁 AT89系列单片机ISP在线编程的AT89C2051的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -