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

📄 93c46.lst

📁 93C46/66的读写程序
💻 LST
字号:
C51 COMPILER V7.09   93C46                                                                 10/17/2005 17:03:10 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 93C46
OBJECT MODULE PLACED IN 93c46.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe 93c46.c DB OE SMALL ROM(LARGE)

line level    source

   1          #include <AT89X52.h>
   2          
   3          
   4          sbit CS_93C46=P2^3;
   5          sbit SK_93C46=P2^2;
   6          sbit DI_93C46=P2^1;
   7          sbit DO_93C46=P2^0;
   8          sbit CD_1=P2^4;
   9          sbit CD_2=P2^5;
  10          sbit CD_3=P2^6;
  11          sbit CD_4=P2^7;
  12          unsigned char WRITE(unsigned char,unsigned char);
  13          unsigned char READ(unsigned char);
  14          void delay1(unsigned int);
  15          
  16          
  17          //void write_93c46(unsigned char page,unsigned int position)
  18          //{
  19          //unsigned char B0_1;
  20          //Add the code here
  21          //B0_1=page;
  22          //
  23          //page=1;
  24          //position=1;
  25          //The code to write 93c46 in (page,position)
  26          
  27          //}
  28          
  29          void store(unsigned char n)
  30          {
  31   1      //      unsigned int sum,position;
  32   1      //      unsigned char page;
  33   1      //      sum=hh*3600+mm*60+ss;
  34   1      //      page=sum/900;
  35   1      //      position=sum%900;
  36   1      //      _93c46(page,position);
  37   1      WRITE(0x05,n);
  38   1      
  39   1      }
  40          
  41          void main()
  42          {
  43   1      unsigned char n;
  44   1      P0=0xff;
  45   1      
  46   1      //for(n=0;n<0x7f;n++)
  47   1      //{
  48   1      //WRITE(n,n);
  49   1      //}
  50   1      while(1)
  51   1              {
  52   2              for(n=0;n<0x7f;n++)
  53   2                      {
  54   3                      CD_1=0;
  55   3                      CD_2=1;
C51 COMPILER V7.09   93C46                                                                 10/17/2005 17:03:10 PAGE 2   

  56   3                      P0=READ(n);
  57   3                      delay1(10000);
  58   3                      CD_2=0;
  59   3                      CD_1=1;
  60   3                      P0=n;
  61   3                      delay1(10000);
  62   3                      }
  63   2              }
  64   1      }
  65          
  66          
  67          
  68          
  69          
  70          
  71          
  72          //-----------------------------------------------------COPY--------------------------------------------
  73          //2 .用C51 软件包对CAT93C46 器件进行读写操作
  74          //(1 )CAT93C46 的汇编读写软件包
  75          /*=========================================================*/
  76          /* CSI93C46 操作子程序 */
  77          /* 注意:这里使用的CSI93C46 为8 位结构的EEROM
  78          */
  79          /*=========================================================*/
  80          //#include <Reg764.h>
  81          /*87LPC764 的头文件*/
  82          
  83          void delay1(unsigned int num)
  84          {
  85   1      int m;
  86   1      m=num;
  87   1      while(m!=0){m=m-1;}
  88   1      }
  89          /***********************************************************************/
  90          /*名称: START_93C46() */
  91          /*说明: 用于93C46 的启动,防止由于CS_93C46 的改动而引起数据时序混乱 */
  92          /***********************************************************************/
  93          void START_93C46()
  94          {
  95   1      DO_93C46=1; /*防止DO 由于是低电平而无法输入*/
  96   1      CS_93C46=1;
  97   1      /*开启93C46*/
  98   1      CS_93C46=0;
  99   1      DI_93C46=0;
 100   1      SK_93C46=0;
 101   1      CS_93C46=1;
 102   1      delay1(10000);
 103   1      }
 104          /***************************************************************************/
 105          /*名称:END_93C46() */
 106          /*说明:用于93C46 的结束,防止由于CS_93C46 的改动而引起数据线为0 而无法输入*/
 107          /***************************************************************************/
 108          void END_93C46()
 109          {
 110   1      CS_93C46=0;
 111   1      DI_93C46=1;
 112   1      SK_93C46=1;
 113   1      }
 114          /***********************************************************************/
 115          /*名称:SEND_DATA_93C46() */
 116          /*说明:在93C46 启动下,送入指定位数的数据 */
 117          /*输入: op_data 要输入的数据 */
C51 COMPILER V7.09   93C46                                                                 10/17/2005 17:03:10 PAGE 3   

 118          /* num 输入的位数 */
 119          /**********************************************************************/
 120          void SEND_DATA_93C46(unsigned char op_data,unsigned char num)
 121          {data unsigned char temp1;
 122   1      op_data=op_data<<(8-num); /*左移去掉无用位*/
 123   1      for(temp1=0;temp1<num;temp1++)
 124   1      {if( (op_data&0X80)==0 ){DI_93C46=0;}
 125   2      else{DI_93C46=1;}
 126   2      SK_93C46=1;
 127   2      SK_93C46=1;
 128   2      SK_93C46=1;
 129   2      SK_93C46=1;
 130   2      SK_93C46=0;
 131   2      op_data=op_data<<1;
 132   2      }
 133   1      }
 134          /***********************************************************************/
 135          /*名称: EWEN_93C46() */
 136          /*说明: 93C46 的编程启动.操作码(100 11XXXX) */
 137          /***********************************************************************/
 138          void EWEN_93C46()
 139          {
 140   1      START_93C46();
 141   1      SEND_DATA_93C46(0X04,0X03); /*送入3 位操作码*/
 142   1      SEND_DATA_93C46(0X30,0X07); /*送入6 位地址*/
 143   1      END_93C46();
 144   1      }
 145          /***********************************************************************/
 146          /*名称: EWDS_93C46() */
 147          /*说明: 93C46 的编程关闭.操作码(100 00XXXX) */
 148          /**********************************************************************/
 149          void EWDS_93C46()
 150          {
 151   1      START_93C46();
 152   1      SEND_DATA_93C46(0X04,0X03);
 153   1      SEND_DATA_93C46(0X00,0X07);
 154   1      END_93C46();
 155   1      }
 156          /***********************************************************************/ /*名称:READ() */
 157          /*说明:93C46 的字读取程序 */
 158          /*输入:要读取的字节地址(7 位) */
 159          /*输出:读取的字数值 */
 160          /**********************************************************************/
 161          unsigned char READ(unsigned char address)
 162          {data unsigned char temp1;
 163   1      data unsigned char temp2;
 164   1      START_93C46();
 165   1      SEND_DATA_93C46(0X06,0X03);
 166   1      SEND_DATA_93C46(address,0X07);
 167   1      temp2=0; /*存放返回数据的缓冲先清零*/
 168   1      for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
 169   1      {temp2=temp2<<1;
 170   2      SK_93C46=1;
 171   2      SK_93C46=1;
 172   2      SK_93C46=1;
 173   2      SK_93C46=1;
 174   2      SK_93C46=1;
 175   2      SK_93C46=0;
 176   2      if(DO_93C46==1){temp2=temp2|0X01;}
 177   2      }
 178   1      END_93C46();
 179   1      return temp2;//8位返回值,全为1表示全部写读取成功,为0的位表示卸寥‰不成功
C51 COMPILER V7.09   93C46                                                                 10/17/2005 17:03:10 PAGE 4   

 180   1      }
 181          /**********************************************************************/
 182          /*名称:() */
 183          /*说明:93C46 的字写入程序 */
 184          /*输入: address 要写入的字节地址(7 位) */
 185          /* op_data 要写入的数据(8 位) */
 186          /*输出: 读取的字数值 */
 187          /**********************************************************************/
 188          unsigned char WRITE(unsigned char address,unsigned char op_data)
 189          {data unsigned char temp1;
 190   1      data unsigned int temp2;
 191   1      EWEN_93C46();
 192   1      START_93C46();
 193   1      SEND_DATA_93C46(0X05,0X03);
 194   1      SEND_DATA_93C46(address,0X07);
 195   1      SEND_DATA_93C46(op_data,0X08);
 196   1      CS_93C46=0;  //写入数据后CS不片选的时间必须大于CSmin,最大值为1us
 197   1      CS_93C46=1;
 198   1      temp1=1;
 199   1      temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
 200   1      while(!DO_93C46)
 201   1      {temp2=temp2-1;
 202   2      if(temp2==0)
 203   2      {temp1=0;
 204   3      break; /*最大等待延时后说明擦除失败*/
 205   3      }
 206   2      }
 207   1      END_93C46();
 208   1      EWDS_93C46();
 209   1      return temp1;
 210   1      }
 211          /***********************************************************************/
 212          /*名称:ERASE() */
 213          /*说明:93C46 的字擦除程序 */
 214          /*输入: address 要擦除的字地址(6 位) */
 215          /**********************************************************************/
 216          /*
 217          unsigned char ERASE(unsigned char address)
 218          {data unsigned char temp1;
 219          data unsigned int temp2;
 220          EWEN_93C46();
 221          START_93C46();
 222          SEND_DATA_93C46(0X07,0X03);
 223          SEND_DATA_93C46(address,0X06);
 224          CS_93C46=0;
 225          CS_93C46=1;
 226          temp1=1;
 227          temp2=50000;
 228          while(!DO_93C46)
 229          {temp2=temp2-1;
 230          if(temp2==0)
 231          {temp1=0;
 232          break;
 233          }
 234          }
 235          END_93C46();
 236          EWDS_93C46(); //返回表示擦除状态的特征
 237          return temp1;
 238          }
 239          */
 240          
 241          
C51 COMPILER V7.09   93C46                                                                 10/17/2005 17:03:10 PAGE 5   

 242          /**********************************************************************/
 243          /*名称:ERAL() */
 244          /*说明:93C46 的全部擦除程序 */
 245          /**********************************************************************/
 246          /*
 247          unsigned char ERAL()
 248          {data unsigned char temp1;
 249          data unsigned int temp2;
 250          EWEN_93C46();
 251          START_93C46();
 252          SEND_DATA_93C46(0X04,0X03);
 253          SEND_DATA_93C46(0X20,0X06);
 254          CS_93C46=0;
 255          CS_93C46=1;
 256          temp1=1;
 257          temp2=50000;
 258          while(!DO_93C46)
 259          {temp2=temp2-1;
 260          if(temp2==0)
 261          {temp1=0;
 262          break;
 263          }
 264          }
 265          END_93C46();
 266          EWDS_93C46(); //返回表示擦除状态的特征
 267          return temp1;
 268          }
 269          */
 270          
 271          
 272          /***********************************************************************/
 273          /*名称:WRAL() */
 274          /*说明:93C46 的写全部程序 */
 275          /*输入: op_data 要写入的数据(16 位) */
 276          /*输出: 读取的字数值 */
 277          /***********************************************************************/
 278          /*
 279          unsigned char WRAL(unsigned int op_data)
 280          {data unsigned char temp1;
 281          data unsigned int temp2;
 282          EWEN_93C46();
 283          START_93C46();
 284          SEND_DATA_93C46(0X04,0X03);
 285          SEND_DATA_93C46(0X10,0X06);
 286          SEND_DATA_93C46(op_data,0X10);
 287          CS_93C46=0;
 288          CS_93C46=1;
 289          temp1=1;
 290          temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
 291          while(!DO_93C46)
 292          {temp2=temp2-1;
 293          if(temp2==0)
 294          {temp1=0;
 295          break;
 296          }
 297          }
 298          END_93C46();
 299          EWDS_93C46();
 300          return op_data;
 301          }
 302          
 303          */
C51 COMPILER V7.09   93C46                                                                 10/17/2005 17:03:10 PAGE 6   

 304          
 305          
 306          
 307          
 308          
 309          
 310          
 311          
 312          
 313          


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