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

📄 93lc66.lst

📁 HT1621驱动和EEPROM93LC
💻 LST
字号:
C51 COMPILER V7.06   93LC66                                                                05/10/2008 14:12:39 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 93LC66
OBJECT MODULE PLACED IN 93LC66.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 93LC66.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <AT89X52.h>
   3          #include <ABSACC.h>
   4          #include <intrins.h>
   5          #define _Nop() _nop_()
   6          sbit CS_93c66=P0^0;
   7          sbit SK_93c66=P0^1;
   8          sbit DI_93c66=P0^2;
   9          sbit DO_93c66=P0^3;
  10          void START_93c66();
  11          void END_93c66();
  12          void EWEN_93c66();
  13          void EWDS_93c66();
  14          unsigned char READ(unsigned int);
  15          unsigned char WRITE(unsigned int,unsigned int);
  16          void SEND_DATA_93c66(unsigned int,unsigned char);
  17          void delay1(unsigned int);
  18          unsigned char Addr_bit=9;//--------------------------46设为7,66设为9-----
  19          /*void main()
  20          {
  21          unsigned int n,tmp;
  22          P0=0xff;
  23          for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
  24          {
  25          if(!WRITE(n,n))
  26          {
  27          //add write error process here
  28          }
  29          }
  30          while(1)
  31          {
  32          for(n=0;n<0x1ff;n++)//in 46 n range from 0 to 7f
  33            {
  34            tmp=(n<<1);
  35            P0=READ(n);
  36            delay1(60000);
  37            P1=tmp;
  38            delay1(60000);
  39            }
  40          }
  41          }*/
  42          /*93c66 操作子程序 */
  43          /* 注意:这里使用的93c66 为8 位结构的EEROM*/
  44          void delay1(unsigned int num)
  45          {
  46   1      while(num!=0){num=num-1;}
  47   1      }
  48          /***********************************************************************/
  49          /*名称: START_93c66() */
  50          /*说明: 用于93c66 的启动,防止由于CS_93c66 的改动而引起数据时序混乱 */
  51          /***********************************************************************/
  52          void START_93c66()
  53          {
  54   1      DO_93c66=1; /*防止DO 由于是低电平而无法输入*/
  55   1      CS_93c66=1;
C51 COMPILER V7.06   93LC66                                                                05/10/2008 14:12:39 PAGE 2   

  56   1      /*开启93c66*/
  57   1      CS_93c66=0;
  58   1      DI_93c66=0;
  59   1      SK_93c66=0;
  60   1      CS_93c66=1;
  61   1      delay1(1000);
  62   1      }
  63          /***************************************************************************/
  64          /*名称:END_93c66() */
  65          /*说明:用于93c66 的结束,防止由于CS_93c66 的改动而引起数据线为0 而无法输入*/
  66          /***************************************************************************/
  67          void END_93c66()
  68          {
  69   1      CS_93c66=0;
  70   1      DI_93c66=1;
  71   1      SK_93c66=1;
  72   1      }
  73          /***********************************************************************/
  74          /*名称:SEND_DATA_93c66() */
  75          /*说明:在93c66 启动下,送入指定位数的数据 */
  76          /*输入: op_data 要输入的数据 */
  77          /* num 输入的位数 */
  78          /**********************************************************************/
  79          void SEND_DATA_93c66(unsigned int op_data,unsigned char num)
  80          {
  81   1      unsigned char temp1;
  82   1      op_data=op_data<<(16-num); /*左移去掉无用位*/
  83   1      for(temp1=0;temp1<num;temp1++)
  84   1        {
  85   2        if( (op_data&0X8000)==00 )
  86   2        {DI_93c66=0;}
  87   2        else
  88   2        {DI_93c66=1;}
  89   2        SK_93c66=1;//SK_93c66=1;SK_93c66=1;SK_93c66=1;
  90   2        SK_93c66=0;
  91   2        op_data=op_data<<1;
  92   2        }
  93   1      }
  94          /***********************************************************************/
  95          /*名称: EWEN_93c66() */
  96          /*说明: 93c66 的编程启动.操作码(100 11XXXXXXX) */
  97          /***********************************************************************/
  98          void EWEN_93c66()
  99          {
 100   1      START_93c66();
 101   1      SEND_DATA_93c66(0X0013,0X05); /*送入3 位操作码+11*/
 102   1      SEND_DATA_93c66(0X0000,Addr_bit-2); /*送入9 位地址*/
 103   1      END_93c66();
 104   1      }
 105          /***********************************************************************/
 106          /*名称: EWDS_93c66() */
 107          /*说明: 93c66 的编程关闭.操作码(100 00XXXXXXX) */
 108          /**********************************************************************/
 109          void EWDS_93c66()
 110          {
 111   1      START_93c66();
 112   1      SEND_DATA_93c66(0X0004,0X03);
 113   1      SEND_DATA_93c66(0X0000,Addr_bit);
 114   1      END_93c66();
 115   1      }
 116          /***********************************************************************/ /*名称:READ() */
 117          /*说明:93c66 的字读取程序 */
C51 COMPILER V7.06   93LC66                                                                05/10/2008 14:12:39 PAGE 3   

 118          /*输入:要读取的字节地址(9 位) */
 119          /*输出:读取的字数值 */
 120          /**********************************************************************/
 121          unsigned char READ(unsigned int address)
 122          {
 123   1      unsigned char temp1;
 124   1      unsigned char temp2;
 125   1      START_93c66();
 126   1      SEND_DATA_93c66(0X0006,0X03);
 127   1      SEND_DATA_93c66(address,Addr_bit);
 128   1      temp2=0; /*存放返回数据的缓冲先清零*/
 129   1      for(temp1=0;temp1<8;temp1++) /*循环读出8 个数据*/
 130   1        {
 131   2        temp2=temp2<<1;
 132   2        SK_93c66=1;SK_93c66=0;
 133   2        if(DO_93c66==1)
 134   2          {temp2=temp2|0X01;}
 135   2        }
 136   1        END_93c66();
 137   1        return temp2;
 138   1      }
 139          /**********************************************************************/
 140          /*名称:WRITE() */
 141          /*说明:93c66 的字写入程序 */
 142          /*输入: address 要写入的字节地址(9 位) */
 143          /* op_data 要写入的数据(8 位) */
 144          /*输出: 读取的字数值 */
 145          /**********************************************************************/
 146          unsigned char WRITE(unsigned int address,unsigned int op_data)
 147          {
 148   1      unsigned char temp1;
 149   1      unsigned int temp2;
 150   1      EWEN_93c66();
 151   1      START_93c66();
 152   1      SEND_DATA_93c66(0X0005,0X03);
 153   1      SEND_DATA_93c66(address,Addr_bit);
 154   1      SEND_DATA_93c66(op_data,0X08);
 155   1      CS_93c66=0;
 156   1      CS_93c66=1;
 157   1      temp1=1;
 158   1      temp2=50000; /*设置一个最大延时等待数值.注意在不同的晶振下延时是不同的*/
 159   1      while(!DO_93c66)
 160   1        {
 161   2        temp2=temp2-1;
 162   2        if(temp2==0)
 163   2        {
 164   3        temp1=0;//temp1=0则写入失败
 165   3        CD_3=0;
*** ERROR C202 IN LINE 165 OF 93LC66.C: 'CD_3': undefined identifier
 166   3        P0=0X08;
 167   3        delay1(60000);
 168   3        P0=0;
 169   3        CD_3=1;
*** ERROR C202 IN LINE 169 OF 93LC66.C: 'CD_3': undefined identifier
 170   3        //break; /*最大等待延时后说明擦除失败*/
 171   3        }
 172   2        }
 173   1      END_93c66();
 174   1      EWDS_93c66();
 175   1      return temp1;
 176   1      }
 177          /***********************************************************************/
C51 COMPILER V7.06   93LC66                                                                05/10/2008 14:12:39 PAGE 4   

 178          /*名称:ERASE() */
 179          /*说明:93c66 的字擦除程序 */
 180          /*输入: address 要擦除的字地址(9 位) */
 181          /**********************************************************************/
 182          unsigned char ERASE(unsigned char address)
 183          {data unsigned char temp1;
 184   1      data unsigned int temp2;
 185   1      EWEN_93c66();
 186   1      START_93c66();
 187   1      SEND_DATA_93c66(0X07,0X03);
 188   1      SEND_DATA_93c66(address,0X06);
 189   1      CS_93c66=0;
 190   1      CS_93c66=1;
 191   1      temp1=1;
 192   1      temp2=50000;
 193   1      while(!DO_93c66)
 194   1      {temp2=temp2-1;
 195   2      if(temp2==0)
 196   2      {temp1=0;
 197   3      break;
 198   3      }
 199   2      }
 200   1      END_93c66();
 201   1      EWDS_93c66(); //返回表示擦除状态的特征
 202   1      return temp1;
 203   1      }
 204          
 205          /**********************************************************************/
 206          /*名称:ERAL() */
 207          /*说明:93c66 的全部擦除程序 */
 208          /**********************************************************************/
 209          unsigned char ERAL()
 210          {data unsigned char temp1;
 211   1      data unsigned int temp2;
 212   1      EWEN_93c66();
 213   1      START_93c66();
 214   1      SEND_DATA_93c66(0X04,0X03);
 215   1      SEND_DATA_93c66(0X20,0X06);
 216   1      CS_93c66=0;
 217   1      CS_93c66=1;
 218   1      temp1=1;
 219   1      temp2=50000;
 220   1      while(!DO_93c66)
 221   1      {temp2=temp2-1;
 222   2      if(temp2==0)
 223   2      {temp1=0;
 224   3      break;
 225   3      }
 226   2      }
 227   1      END_93c66();
 228   1      EWDS_93c66(); //返回表示擦除状态的特征
 229   1      return temp1;
 230   1      }
 231          /***********************************************************************/
 232          /*名称:WRAL() */
 233          /*说明:93c66 的写全部程序 */
 234          /*输入: op_data 要写入的数据(16 位) */
 235          /*输出: 读取的字数值 */
 236          /***********************************************************************/
 237          unsigned char WRAL(unsigned int op_data)
 238          {data unsigned char temp1;
 239   1      data unsigned int temp2;
C51 COMPILER V7.06   93LC66                                                                05/10/2008 14:12:39 PAGE 5   

 240   1      EWEN_93c66();
 241   1      START_93c66();
 242   1      SEND_DATA_93c66(0X04,0X03);
 243   1      SEND_DATA_93c66(0X10,0X06);
 244   1      SEND_DATA_93c66(op_data,0X10);
 245   1      CS_93c66=0;
 246   1      CS_93c66=1;
 247   1      temp1=1;
 248   1      temp2=50000; //设置一个最大延时等待数值.注意在不同的晶振下延时是不同的
 249   1      while(!DO_93c66)
 250   1      {temp2=temp2-1;
 251   2      if(temp2==0)
 252   2      {temp1=0;
 253   3      break;
 254   3      }
 255   2      }
 256   1      END_93c66();
 257   1      EWDS_93c66();
 258   1      return op_data;
 259   1      }

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

⌨️ 快捷键说明

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