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

📄 ep5x.lst

📁 制作编程器Easy 51串行编程器源程序C
💻 LST
📖 第 1 页 / 共 2 页
字号:
 166   3                                    if(ComBuf[0]==0x07)//判断是否继续写
 167   3                                    {
 168   4                                              for(n=2;n<=17;n++)//ComBuf[2~17]为待写入数据块
 169   4                                              {
 170   5                                                        if(!pw.fpWrite(ComBuf[n]))//<<<<<<<<<<<<<<<<<<<调用写该器件一个单元的函数
 171   5                                                        {
 172   6                                                                  pw.fpProOver();//出错了就结束编程
 173   6                                                                  ComBuf[0]=0xff;
 174   6                                                                  SendResp();//回应上位机一个字节,表示写数据出错了
 175   6                                                                  WaitData();//等待上位机的回应后就结束
 176   6                                                                  return;   
 177   6                                                        }
 178   5                                                        nAddress++;//下一个单元
 179   5                                              }
C51 COMPILER V7.01  EP5X                                                                   03/09/2008 14:31:20 PAGE 4   

 180   4                                              ComBuf[0]=1;//回应上位机一个字节,表示数据块顺利完成,请求继续
 181   4                                              SendResp();
 182   4                                    }
 183   3                                    else if(ComBuf[0]==0x00)//写器件结束
 184   3                                              break;
 185   3                                    else//可能是通讯出错了
 186   3                                    {
 187   4                                              pw.fpProOver();
 188   4                                              return;
 189   4                                    }
 190   3                          }
 191   2                          else//等待数据失败
 192   2                          {
 193   3                                    pw.fpProOver();
 194   3                                    return;
 195   3                          }
 196   2                }
 197   1                pw.fpProOver();//编程结束后的工作
 198   1                Delay_ms(50);//延时等待上位机写线程结束
 199   1                ComBuf[0]=0;//通知上位机编程器进入就绪状态
 200   1                SendData();
 201   1      }
 202          
 203          void Read()//读器件
 204          {
 205   1                BYTE n;
 206   1                pw.fpInitPro();//先设置成编程状态
 207   1                SendData();//回应上位机表示进入读状态
 208   1                while(1)
 209   1                {
 210   2                          if(WaitResp())//等待上位机回应1个字节
 211   2                          {
 212   3                                    if(ComBuf[0]==0)//ComBuf[0]==0表示读结束
 213   3                                    {
 214   4                                              break;
 215   4                                    }
 216   3                                    else if(ComBuf[0]==0xff)//0xff表示重发
 217   3                                    {
 218   4                                              nAddress=nAddress-0x0010;
 219   4                                    }
 220   3                                    for(n=2;n<=17;n++)//ComBuf[2~17]保存读出的数据块
 221   3                                    {
 222   4                                              ComBuf[n]=pw.fpRead();//<<<<<<<<调用写该器件一个单元的函数
 223   4                                              nAddress++;//下一个单元
 224   4                                    }
 225   3                                    ComBuf[0]=6;//向上位机发送读出的数据块
 226   3                                    SendData();
 227   3                          }
 228   2                          else
 229   2                                    break;//等待回应失败          
 230   2      
 231   2                }
 232   1                pw.fpProOver();//操作结束设置为运行状态
 233   1                ComBuf[0]=0;//通知上位机编程器进入就绪状态
 234   1                SendData();
 235   1      }
 236          
 237          void Lock()//写锁定位
 238          {
 239   1                pw.fpLock();
 240   1                SendData();
 241   1      }
C51 COMPILER V7.01  EP5X                                                                   03/09/2008 14:31:20 PAGE 5   

 242          
 243          ///////////////////////////////////////////////////////////////////////////////////////////////////
 244          //所支持的FID,请在这里继续添加
 245          ///////////////////////////////////////////////////////////////////////////////////////////////////
 246          extern void PreparePro00();//FID=00:AT89C51编程器
 247          extern void PreparePro01();//FID=01:AT89C2051编程器
 248          extern void PreparePro02();//FID=02:AT89S51编程器
 249          void main()
 250          {
 251   1                SP=0x60;
 252   1                SetVpp5V();//先初始化Vpp为5v
 253   1                SCON=0x00;
 254   1                TCON=0x00;
 255   1                //PCON=0x00;//波特率*2
 256   1                IE=0x00;
 257   1                //TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
 258   1                //        0    0   1  0   0    0   0  1
 259   1                TMOD=0x21;//T0用于延时程序
 260   1                TH1=0xff;
 261   1                TL1=0xff;//波特率28800*2,注意PCON
 262   1                //SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI
 263   1          //        0   1   0   1   0   0  0  0
 264   1                SCON=0x50;
 265   1                TR1=1;
 266   1                Delay_ms(1000);//延时1秒后编程器自举
 267   1                ComBuf[0]=0;
 268   1                SendData();
 269   1                while(1)//串口通讯采用查询方式
 270   1                {
 271   2                          if(!WaitComm())//如果超时,通讯出错
 272   2                          {
 273   3                                    Delay_ms(500);
 274   3                                    ComBuf[0]=0;//让编程器复位,使编程器就绪
 275   3                          }
 276   2                          switch(ComBuf[1])//根据FID设置(ProWork)pw中的函数指针
 277   2                          {
 278   3                                    case 0://at89c51编程器
 279   3                                              PreparePro00();
 280   3                                              break;
 281   3                                    case 1://at89c2051编程器
 282   3                                              PreparePro01();
 283   3                                              break;
 284   3                                    case 2://at89s51编程器
 285   3                                              PreparePro02();
 286   3                                              break;
 287   3                                    //case 3:支持新器件时,请继续向下添加
 288   3                                    //        break;
 289   3                                    //case 4:
 290   3                                    //        break;
 291   3                                    default:
 292   3                                              ComBuf[0]=0xff;
 293   3                                              ComBuf[1]=0xff;//表示无效的操作
 294   3                                              break;
 295   3                          }
 296   2                          switch(ComBuf[0])//根据操作ID跳到不同的操作函数
 297   2                          {
 298   3                                    case 0x00:
 299   3                                              RstPro();//编程器复位
 300   3                                              break;
 301   3                                    case 0x01:
 302   3                                              ReadSign();//读特征字
 303   3                                              break;
C51 COMPILER V7.01  EP5X                                                                   03/09/2008 14:31:20 PAGE 6   

 304   3                                    case 0x02:
 305   3                                              Erase();//擦除器件
 306   3                                              break;
 307   3                                    case 0x03:
 308   3                                              Write();//写器件
 309   3                                              break;
 310   3                                    case 0x04:
 311   3                                              Read();//读器件
 312   3                                              break;
 313   3                                    case 0x05:
 314   3                                              Lock();//写锁定位
 315   3                                              break;
 316   3                                    default:
 317   3                                              SendData();
 318   3                                              break;
 319   3                          }
 320   2                }
 321   1      }
 322          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    626    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     43       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -