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

📄 93c66try.lst

📁 93C46/66的读写程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 325   1      SK_93c66=1;
 326   1      SK_93c66=0;
 327   1      DI_93c66=0;//0
 328   1      DI_93c66=0;
 329   1      SK_93c66=1;
 330   1      SK_93c66=0;
 331   1      SK_93c66=0;
 332   1      
 333   1      CD_1=0;
 334   1      SK_93c66=1;//0
 335   1      SK_93c66=0;
 336   1      C1=DO_93c66;
 337   1      SK_93c66=1;//1
 338   1      SK_93c66=0;
 339   1      C2=DO_93c66;
 340   1      SK_93c66=1;//2
 341   1      SK_93c66=0;
 342   1      C3=DO_93c66;
 343   1      SK_93c66=1;//3
 344   1      SK_93c66=0;
 345   1      C4=DO_93c66;
 346   1      SK_93c66=1;//4
 347   1      SK_93c66=0;
 348   1      C5=DO_93c66;
 349   1      SK_93c66=1;//5
 350   1      SK_93c66=0;
 351   1      C6=DO_93c66;
 352   1      SK_93c66=1;//6
 353   1      SK_93c66=0;
 354   1      C7=DO_93c66;
 355   1      SK_93c66=1;//7
 356   1      SK_93c66=0;
 357   1      C8=DO_93c66;
 358   1      while(1)
 359   1      {
 360   2      ;
 361   2      }
 362   1      
 363   1      
 364   1      //unsigned int n,tmp;
 365   1      
C51 COMPILER V7.09   93C66TRY                                                              10/31/2005 17:14:39 PAGE 7   

 366   1      /*
 367   1      unsigned int n,tmp;
 368   1      
 369   1      P0=0xff;
 370   1      for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
 371   1      {
 372   1      if(!WRITE(n,n))
 373   1              {
 374   1              CD_3=0;
 375   1              P0=0x65;
 376   1              while(1)
 377   1              {};
 378   1              }
 379   1      }
 380   1      while(1)
 381   1              {
 382   1              for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
 383   1                      {
 384   1                      tmp=(n<<1);
 385   1                      CD_2=1;
 386   1                      CD_1=0;
 387   1                      P0=READ(n);
 388   1                      delay1(60000);
 389   1                      CD_1=1;
 390   1                      CD_2=0;
 391   1                      P0=tmp;
 392   1                      delay1(60000);
 393   1                      }
 394   1              }
 395   1      */
 396   1      
 397   1      //CD_1=0;
 398   1      //while(1)
 399   1      //{
 400   1      //for(n=0;n<0x1ff;n++)
 401   1      //{P0=(READ(n)<<1);
 402   1      //delay1(30000);
 403   1      
 404   1      
 405   1      }
 406          //-----------------------------------------------------COPY--------------------------------------------
 407          //2 .用C51 软件包对CAT93c66 器件进行读写操作
 408          //(1 )CAT93c66 的汇编读写软件包
 409          /*=========================================================*/
 410          /* CSI93c66 操作子程序 */
 411          /* 注意:这里使用的CSI93c66 为8 位结构的EEROM
 412          */
 413          /*=========================================================*/
 414          //#include <Reg764.h>
 415          /*87LPC764 的头文件*/
 416          void delay1(unsigned int num)
 417          {
 418   1              while(num!=0){num=num-1;}
 419   1      }
 420          /***********************************************************************/
 421          /*名称: START_93c66() */
 422          /*说明: 用于93c66 的启动,防止由于CS_93c66 的改动而引起数据时序混乱 */
 423          /***********************************************************************/
 424          void START_93c66()
 425          {
 426   1              //DO_93c66=1; /*防止DO 由于是低电平而无法输入*/
 427   1              //CS_93c66=1;
C51 COMPILER V7.09   93C66TRY                                                              10/31/2005 17:14:39 PAGE 8   

 428   1              /*开启93c66*/
 429   1              CS_93c66=0;
 430   1              DI_93c66=0;
 431   1              SK_93c66=0;
 432   1              CS_93c66=1;
 433   1              delay1(1000);
 434   1      }
 435          /***************************************************************************/
 436          /*名称:END_93c66() */
 437          /*说明:用于93c66 的结束,防止由于CS_93c66 的改动而引起数据线为0 而无法输入*/
 438          /***************************************************************************/
 439          void END_93c66()
 440          {
 441   1              CS_93c66=0;
 442   1      //      DI_93c66=1;
 443   1      //      SK_93c66=1;
 444   1      }
 445          /***********************************************************************/
 446          /*名称:SEND_DATA_93c66() */
 447          /*说明:在93c66 启动下,送入指定位数的数据 */
 448          /*输入: op_data 要输入的数据 */
 449          /* num 输入的位数 */
 450          /**********************************************************************/
 451          void SEND_DATA_93c66(unsigned int op_data,unsigned char num)
 452          {
 453   1              unsigned char temp1;
 454   1              op_data=op_data<<(16-num); /*左移去掉无用位*/
 455   1              for(temp1=0;temp1<num;temp1++)
 456   1                      {
 457   2                      if( (op_data&0X8000)==00 )
 458   2                              {DI_93c66=0;}
 459   2                      else
 460   2                              {DI_93c66=1;}
 461   2                      SK_93c66=1;SK_93c66=1;SK_93c66=1;SK_93c66=1;
 462   2                      SK_93c66=0;SK_93c66=0;SK_93c66=0;SK_93c66=0;
 463   2                      op_data=op_data<<1;
 464   2                      }
 465   1      }
 466          /***********************************************************************/
 467          /*名称: EWEN_93c66() */
 468          /*说明: 93c66 的编程启动.操作码(100 11XXXXXXX) */
 469          /***********************************************************************/
 470          void EWEN_93c66()
 471          {
 472   1              START_93c66();
 473   1      //      SEND_DATA_93c66(0X0013,0X05); /*送入3 位操作码+11*/
 474   1      //      SEND_DATA_93c66(0X0000,Addr_bit-2); /*送入9 位地址*/
 475   1              SEND_DATA_93c66(0X0980,0X0C);
 476   1              END_93c66();
 477   1      }
 478          /***********************************************************************/
 479          /*名称: EWDS_93c66() */
 480          /*说明: 93c66 的编程关闭.操作码(100 00XXXXXXX) */
 481          /**********************************************************************/
 482          void EWDS_93c66()
 483          {
 484   1              START_93c66();
 485   1      //      SEND_DATA_93c66(0X0004,0X03);
 486   1      //      SEND_DATA_93c66(0X0000,Addr_bit);
 487   1              SEND_DATA_93c66(0X0800,0X0C);
 488   1              END_93c66();
 489   1      }
C51 COMPILER V7.09   93C66TRY                                                              10/31/2005 17:14:39 PAGE 9   

 490          /***********************************************************************/ /*名称:READ() */
 491          /*说明:93c66 的字读取程序 */
 492          /*输入:要读取的字节地址(9 位) */
 493          /*输出:读取的字数值 */
 494          /**********************************************************************/
 495          unsigned char READ(unsigned int address)
 496          {
 497   1              unsigned char temp1;
 498   1              unsigned char temp2;
 499   1              START_93c66();
 500   1              SEND_DATA_93c66(0X0006,0X03);
 501   1              SEND_DATA_93c66(address,Addr_bit);
 502   1              temp2=0; /*存放返回数据的缓冲先清零*/
 503   1              for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
 504   1                      {
 505   2                      temp2=temp2<<1;
 506   2                      SK_93c66=1;SK_93c66=0;
 507   2                              if(DO_93c66==1)
 508   2                                      {temp2=temp2|0X01;}
 509   2                      }
 510   1                      END_93c66();
 511   1      
 512   1                      return temp2;
 513   1      }
 514          /**********************************************************************/
 515          /*名称:WRITE() */
 516          /*说明:93c66 的字写入程序 */
 517          /*输入: address 要写入的字节地址(9 位) */
 518          /* op_data 要写入的数据(8 位) */
 519          /*输出: 读取的字数值 */
 520          /**********************************************************************/
 521          unsigned char WRITE(unsigned int address,unsigned int op_data)
 522          {
 523   1              unsigned char temp1;
 524   1              unsigned int temp2;
 525   1              EWEN_93c66();
 526   1              START_93c66();
 527   1              SEND_DATA_93c66(0X0005,0X03);
 528   1              SEND_DATA_93c66(address,Addr_bit);
 529   1              SEND_DATA_93c66(op_data,0X08);
 530   1              CS_93c66=0;
 531   1              CS_93c66=0;
 532   1              CS_93c66=0;
 533   1              CS_93c66=0;
 534   1              CS_93c66=1;
 535   1              temp1=1;
 536   1              temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
 537   1              while(!DO_93c66)
 538   1                      {
 539   2                      temp2=temp2-1;
 540   2                      if(temp2==0)
 541   2                              {
 542   3                              temp1=0;//temp1=0则写入失败
 543   3                              break; /*最大等待延时后说明擦除失败*/
 544   3                              }
 545   2                      }
 546   1              END_93c66();
 547   1              EWDS_93c66();
 548   1              return temp1;
 549   1      }
 550          /***********************************************************************/
 551          /*名称:ERASE() */
C51 COMPILER V7.09   93C66TRY                                                              10/31/2005 17:14:39 PAGE 10  

 552          /*说明:93c66 的字擦除程序 */
 553          /*输入: address 要擦除的字地址(9 位) */
 554          /**********************************************************************/
 555          /*
 556          unsigned char ERASE(unsigned char address)
 557          {data unsigned char temp1;
 558          data unsigned int temp2;
 559          EWEN_93c66();
 560          START_93c66();
 561          SEND_DATA_93c66(0X07,0X03);
 562          SEND_DATA_93c66(address,0X06);
 563          CS_93c66=0;
 564          CS_93c66=1;
 565          temp1=1;
 566          temp2=50000;
 567          while(!DO_93c66)
 568          {temp2=temp2-1;
 569          if(temp2==0)
 570          {temp1=0;
 571          break;
 572          }
 573          }
 574          END_93c66();
 575          EWDS_93c66(); //返回表示擦除状态的特征
 576          return temp1;
 577          }
 578          */
 579          
 580          
 581          /**********************************************************************/
 582          /*名称:ERAL() */
 583          /*说明:93c66 的全部擦除程序 */
 584          /**********************************************************************/
 585          /*
 586          unsigned char ERAL()
 587          {data unsigned char temp1;
 588          data unsigned int temp2;
 589          EWEN_93c66();
 590          START_93c66();
 591          SEND_DATA_93c66(0X04,0X03);
 592          SEND_DATA_93c66(0X20,0X06);
 593          CS_93c66=0;
 594          CS_93c66=1;
 595          temp1=1;
 596          temp2=50000;
 597          while(!DO_93c66)
 598          {temp2=temp2-1;
 599          if(temp2==0)
 600          {temp1=0;
 601          break;
 602          }
 603          }
 604          END_93c66();
 605          EWDS_93c66(); //返回表示擦除状态的特征
 606          return temp1;
 607          }
 608          */
 609          
 610          
 611          /***********************************************************************/
 612          /*名称:WRAL() */
 613          /*说明:93c66 的写全部程序 */
C51 COMPILER V7.09   93C66TRY                                                              10/31/2005 17:14:39 PAGE 11  

 614          /*输入: op_data 要写入的数据(16 位) */
 615          /*输出: 读取的字数值 */
 616          /***********************************************************************/
 617          /*
 618          unsigned char WRAL(unsigned int op_data)
 619          {data unsigned char temp1;
 620          data unsigned int temp2;
 621          EWEN_93c66();
 622          START_93c66();
 623          SEND_DATA_93c66(0X04,0X03);
 624          SEND_DATA_93c66(0X10,0X06);
 625          SEND_DATA_93c66(op_data,0X10);
 626          CS_93c66=0;
 627          CS_93c66=1;
 628          temp1=1;
 629          temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
 630          while(!DO_93c66)
 631          {temp2=temp2-1;
 632          if(temp2==0)
 633          {temp1=0;
 634          break;
 635          }
 636          }
 637          END_93c66();
 638          EWDS_93c66();
 639          return op_data;
 640          }
 641          
 642          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    775    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       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 + -