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

📄 93c46.lst

📁 基于单片机的SPI接口的存储应用
💻 LST
字号:
C51 COMPILER V7.50   93C46                                                                 04/04/2007 15:29:20 PAGE 1   


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

line level    source

   1          /***********************************************************
   2          **模块名称:93C46的读写
   3          **功能描述:该模块的功能是,先将0到9这几个数据存进93C46,然后再依次读出来,
   4          **实现EEPROM功能,断电之后,仍然可以再读出来,并显示出来。
   5          **********************************************************/
   6          
   7          #include <reg51.h>
   8          
   9          sbit CS=P1^0;
  10          sbit CLK=P1^1;
  11          sbit DI=P1^2;
  12          sbit DO=P1^3;
  13          
  14          unsigned char data SendBuffer[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  15                                            0x82,0xf8,0x80,0x90};
  16          
  17          
  18          
  19          delay10ms()
  20          {
  21   1        unsigned i,j;
  22   1        for(i=200;i>0;i--)
  23   1        for(j=200;j>0;j--);
  24   1      }
  25          
  26          
  27          /********************************************************
  28          **名称:Ewen(void)       
  29          **功能:擦除/写入允许指令 Write enable must precede all programming modes.
  30          **输入:
  31          **返回:
  32          *******************************************************/
  33          void Ewen(void) {
  34   1      unsigned char temp,InData;
  35   1      CS=0; 
  36   1      CLK=0;
  37   1      CS=1;
  38   1      InData=0x98; // 10011XXXX
  39   1      for(temp=9;temp!=0;temp--) 
  40   1      {                    // 9位的指令(当93c46选择为16结构时,93c46有7条9位的指令
  41   2        DI=InData&0x80;    // 将InData按位输入
  42   2        CLK=1; CLK=0;
  43   2        InData<<=1;          //InData=InData<<1;
  44   2      }
  45   1      CS=0;
  46   1      }
  47          
  48          /********************************************************
  49          **名称:Ewds(void)      
  50          **功能:禁止指令 Disables all programming instructions.
  51          **输入:
  52          **返回:
  53          *******************************************************/
  54          void Ewds(void) {
  55   1      unsigned char temp,InData;
C51 COMPILER V7.50   93C46                                                                 04/04/2007 15:29:20 PAGE 2   

  56   1      CS=0;
  57   1      CLK=0;
  58   1      CS=1;
  59   1      InData=0x80; // 10000XXXX
  60   1      for(temp=9;temp!=0;temp--)
  61   1      {                          // 9位的指令(当93c46选择为16结构时,93c46有7条9位的指令
  62   2        DI=InData&0x80;           // 将InData按位输入
  63   2        CLK=1; CLK=0;
  64   2        InData<<=1;             //InData=InData<<1;
  65   2      }
  66   1      CS=0;
  67   1      }
  68          
  69          /********************************************************
  70          **名称:unsigned int Read(unsigned char address)     
  71          **功能:Reads data stored in memory, at specified address. 
  72                  将address后六位指向的在93C46中的地址的一个字节(16位)
  73                          读出来放入result中
  74          **输入:address(xx xxxxxx后面六位起作用) 
  75          **返回:result
  76          *******************************************************/
  77          unsigned int Read(unsigned char address)
  78          {
  79   1              unsigned char temp;
  80   1              unsigned int result;
  81   1              Ewen();
  82   1              CLK=0; DI=1;              // 110 A5-A0
  83   1              CS=0; CS=1;
  84   1              CLK=1; CLK=0;             // 先输入一个1
  85   1              address=address&0x3f|0x80;  // address变成10xxxxxx
  86   1              for(temp=8;temp!=0;temp--)      // 接下来连续输入8位(在93C46中的地址 指令形式 110 A5-A0)
  87   1           {                      // 8
  88   2                 DI=address&0x80;
  89   2                 CLK=1; CLK=0;
  90   2                 address<<=1;
  91   2               }
  92   1              DO=1;
  93   1              for(temp=16;temp!=0;temp--)    //读取16位的数据(一字节)
  94   1           {                   // 16
  95   2              CLK=1;                     //在下降沿输出数据到DO
  96   2                  result=(result<<1)|DO;         //将数据按位存入result中
  97   2                  CLK=0; 
  98   2              }
  99   1              CS=0;
 100   1              Ewds();
 101   1              return(result);
 102   1      }
 103          
 104          /********************************************************
 105          **名称:void Write(unsigned char address,unsigned int InData)     
 106          **功能:Writes memory location An - A0.
 107                  将InData写入address
 108          **输入:unsigned char address,unsigned int InData
 109          **返回:
 110          *******************************************************/
 111          void Write(unsigned char address,unsigned int InData) 
 112          {
 113   1        unsigned char temp;
 114   1        Ewen();
 115   1        CLK=0; DI=1; // 101 A5-A0
 116   1        CS=0; CS=1;
 117   1        CLK=1; CLK=0; // 先输入一个1
C51 COMPILER V7.50   93C46                                                                 04/04/2007 15:29:20 PAGE 3   

 118   1        address=address&0x3f|0x40;         // address变成10xxxxxx
 119   1        for(temp=8;temp!=0;temp--)        // 接下来连续输入8位(在93C46中的地址 指令形式 101 A5-A0)
 120   1         { // 8
 121   2           DI=address&0x80;
 122   2           CLK=1; CLK=0;
 123   2           address<<=1;
 124   2         }
 125   1        for(temp=16;temp!=0;temp--)         // 写入16位的数据(一字节)
 126   1        { // 16
 127   2          DI=InData&0x8000;
 128   2          CLK=1; CLK=0;                     //上升沿
 129   2          InData<<=1;                     //InData=InData<<1;
 130   2        }
 131   1        CS=0; DO=1;
 132   1        CS=1; CLK=1;                         //CS不片选芯片(为0)的时间要大于Tcsmin
 133   1        while(DO==0) 
 134   1        {      // busy test
 135   2          CLK=0; CLK=1;                 //如果繁忙状态,则CLK=0,CS=1
 136   2         } 
 137   1        CLK=0; CS=0;                    // 结束
 138   1        Ewds();
 139   1      }
 140          
 141          /*
 142          */
 143          /********************************************************
 144          **名称:void Erase(unsigned char address)   
 145          **功能:Erase memory location An - A0.
 146                  擦除操作指令,将address的内容擦除
 147                          在不需要擦除时,将此函数注释
 148          **输入:unsigned char address
 149          **返回:
 150          *******************************************************
 151          void Erase(unsigned char address) {
 152          unsigned char temp;
 153          Ewen();
 154          CLK=0; DI=1; // 111 A5-A0
 155          CS=0; CS=1;
 156          CLK=1; CLK=0; // 1
 157          address|=0xc0;
 158          for(temp=8;temp!=0;temp--) { // 8
 159          DI=address&0x80;
 160          CLK=1; CLK=0;
 161          address<<=1;
 162          }
 163          CS=0; DO=1;
 164          CS=1; CLK=1;
 165          while(DO==0) {
 166          CLK=0; CLK=1;
 167          }
 168          CLK=0; CS=0;
 169          Ewds();
 170          }
 171          
 172          
 173          */
 174          
 175          /********************************************************
 176          **名称:void Eral(void)  
 177          **功能:Erases all memory locations. Valid only at VCC = 4.5V to 5.5V.
 178                  全部擦除操作指令,93C46所有的内容擦除
 179                          在不需要擦除时,将此函数注释
C51 COMPILER V7.50   93C46                                                                 04/04/2007 15:29:20 PAGE 4   

 180          **输入:
 181          **返回:
 182          *******************************************************
 183          void Eral(void) {
 184          unsigned char temp,InData;
 185          Ewen();
 186          CS=0;
 187          CLK=0;
 188          CS=1;
 189          InData=0x90; // 10010XXXX
 190          for(temp=9;temp!=0;temp--) { // 9
 191          DI=InData&0x80;
 192          CLK=1; CLK=0;
 193          InData<<=1;
 194          }
 195          CS=0; DO=1;
 196          CS=1; CLK=1;
 197          while(DO==0) {
 198          CLK=0; CLK=1;
 199          }
 200          CLK=0; CS=0;
 201          Ewds();
 202          }
 203          
 204          
 205          /*
 206          
 207          /********************************************************
 208          
 209          // Writes all memory locations. Valid only at VCC = 4.5V to 5.5V.
 210          
 211          *******************************************************
 212          void Wral(unsigned int InData) {
 213          unsigned char temp,address;
 214          Ewen();
 215          CS=0;
 216          CLK=0;
 217          CS=1;
 218          address=0x88; // 10001XXXX
 219          for(temp=9;temp!=0;temp--) { // 9
 220          DI=address&0x80;
 221          CLK=1; CLK=0;
 222          address<<=1;
 223          }
 224          for(temp=16;temp!=0;temp--) { // 16
 225          DI=InData&0x8000;
 226          CLK=1; CLK=0;
 227          InData<<=1;
 228          }
 229          CS=0; DO=1;
 230          CS=1; CLK=1;
 231          while(DO==0) {
 232          CLK=0; CLK=1;
 233          }
 234          CLK=0; CS=0;
 235          Ewds();
 236          }
 237          */
 238          
 239          /********************************************************
 240          **名称:unsigned char ReadChar(unsigned char address)   
 241          **功能:address 为8位的地址,  
C51 COMPILER V7.50   93C46                                                                 04/04/2007 15:29:20 PAGE 5   

 242                  address 为 x xxxxxx x 
 243                          第一个x是没什么用的,中间六个xxxxxx是真正的地址
 244                          最后一个x是表示取一个字节(16位)中的高8位还是低8位(1为高8位,0为低8位

⌨️ 快捷键说明

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