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

📄 wl006.lst

📁 单片机开发资料 基于51单片机的单片机开发板 包括《实验例程
💻 LST
字号:
C51 COMPILER V7.08   WL006                                                                 11/03/2004 11:01:25 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE WL006
OBJECT MODULE PLACED IN wl006.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wl006.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2          *                                                                              *
   3          *    File       : wl006.c                                                      *
   4          *    Date       : 2004-1-5                                                     *
   5          *    Version    : 1.0                                                          *
   6          *                                                                              *
   7          ********************************************************************************
   8          *    Descriptoon:                                                              *
   9          *                AT93C46读写演示程序                                           *
  10          *                从地址0x00开始写入数据"www.mcu-diy.com", 然后再读出          *
  11          *                                                                              *
  12          *                注意:在擦除和写入数据之前,必须先写入EWEN指令                *
  13          *                                                                              *
  14          *                                                                              *
  15          *******************************************************************************/
  16          #include <reg51.h>
  17          #include <intrins.h>
  18          
  19          //define OP code
  20          #define OP_EWEN_H               0x00    // 00                                   write enable
  21          #define OP_EWEN_L               0x60    // 11X XXXX                             write enable
  22          #define OP_EWDS_H               0x00    // 00                                   disable
  23          #define OP_EWDS_L               0x00    // 00X XXXX                             disable
  24          
  25          #define OP_WRITE_H              0x40    // 01 A6-A0                             write data
  26          #define OP_READ_H               0x80    // 10 A6-A0                             read data
  27          
  28          #define OP_ERASE_H              0xc0    // 11 A6-A0                             erase a word
  29          
  30          #define OP_ERAL_H               0x00    // 00                                   erase all
  31          #define OP_ERAL_L               0x40    // 10X XXXX                             erase all
  32          #define OP_WRAL_H               0x00    // 00                                   write all       
  33          #define OP_WRAL_L               0x20    // 01X XXXX                             write all       
  34          
  35          
  36          //define pin
  37          sbit CS = P1^4;
  38          sbit SK = P1^0;
  39          sbit DI = P1^2;
  40          sbit DO = P1^3;
  41          
  42          unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
  43          
  44          void start();
  45          void ewen();
  46          void ewds();
  47          void erase();
  48          void write(unsigned char addr, unsigned char indata);
  49          unsigned char read(unsigned char addr);
  50          void inop(unsigned char op_h, unsigned char op_l);
  51          void shin(unsigned char indata);
  52          unsigned char shout();
  53          void delayms(unsigned char ms);
  54          
  55          main()
C51 COMPILER V7.08   WL006                                                                 11/03/2004 11:01:25 PAGE 2   

  56          {
  57   1              unsigned char i;
  58   1              CS = 0;                         //初始化端口
  59   1              SK = 0;
  60   1              DI = 1;
  61   1              DO = 1;
  62   1      
  63   1              ewen();                         // 使能写入操作
  64   1              erase();                        // 擦除全部内容
  65   1                      
  66   1              for(i = 0 ; i < 8; i++)         //写入显示代码到AT93C46
  67   1              {
  68   2                      write(i, dis_code[i]);
  69   2              }
  70   1              
  71   1              ewds();                         // 禁止写入操作 
  72   1              
  73   1              i = 0;
  74   1              while(1)
  75   1              {
  76   2                      P0 = read(i);   // 循环读取AT93C46内容,并输出到P0口
  77   2                      i++;
  78   2                      i &= 0x07;              // 循环读取地址为0x00~0x07
  79   2                      delayms(250);           
  80   2              }
  81   1      }
  82          
  83          
  84          void write(unsigned char addr, unsigned char indata)
  85          // 写入数据indata到addr
  86          {
  87   1              inop(OP_WRITE_H, addr); // 写入指令和地址
  88   1                      shin(indata);
  89   1                      CS = 0;
  90   1              delayms(10);                    // Twp
  91   1      }
  92          
  93          unsigned char read(unsigned char addr)
  94          // 读取addr处的数据
  95          {
  96   1              unsigned char out_data;
  97   1              inop(OP_READ_H, addr);  // 写入指令和地址
  98   1              out_data = shout();
  99   1              CS = 0; 
 100   1              return out_data;
 101   1      }
 102          
 103          void ewen()
 104          {
 105   1              inop(OP_EWEN_H, OP_EWEN_L);
 106   1              CS= 0;
 107   1      }
 108          
 109          void ewds()
 110          {
 111   1              inop(OP_EWDS_H, OP_EWDS_L);
 112   1              CS= 0;  
 113   1      }
 114          
 115          void erase()
 116          {
 117   1              inop(OP_ERAL_H, OP_ERAL_L);
C51 COMPILER V7.08   WL006                                                                 11/03/2004 11:01:25 PAGE 3   

 118   1              delayms(30);
 119   1              CS = 0;
 120   1      }
 121          
 122          
 123          void inop(unsigned char op_h, unsigned char op_l)
 124          //移入op_h的高两位和op_l的低7位
 125          //op_h为指令码的高两位
 126          //op_l为指令码的低7位或7位地址
 127          {       
 128   1      
 129   1              unsigned char i;
 130   1              
 131   1              SK = 0;         // 开始位
 132   1              DI = 1;
 133   1              CS = 1;
 134   1              _nop_();
 135   1              _nop_(); 
 136   1              SK = 1;
 137   1              _nop_();
 138   1              _nop_();
 139   1              SK = 0;         // 开始位结束
 140   1      
 141   1              DI = (bit)(op_h & 0x80);        // 先移入指令码高位
 142   1              SK = 1;
 143   1              op_h <<= 1;
 144   1              SK = 0;         
 145   1      
 146   1              DI = (bit)(op_h & 0x80);        // 移入指令码次高位
 147   1              SK = 1;
 148   1              _nop_();
 149   1              _nop_();        
 150   1              SK = 0;
 151   1              
 152   1              // 移入余下的指令码或地址数据
 153   1              op_l <<= 1;     
 154   1              for(i = 0; i < 7; i++)          
 155   1              {
 156   2                      DI = (bit)(op_l & 0x80);        // 先移入高位
 157   2                      SK = 1;
 158   2                      op_l <<= 1;
 159   2                      SK = 0;         
 160   2              }
 161   1              DI = 1;         
 162   1      }
 163          
 164          
 165          void shin(unsigned char indata)         
 166          //移入数据
 167          {
 168   1              unsigned char i;
 169   1              for(i = 0; i < 8; i++)
 170   1              {
 171   2                      DI = (bit)(indata & 0x80);      // 先移入高位
 172   2                      SK = 1;
 173   2                      indata <<= 1;
 174   2                      SK = 0;         
 175   2              }
 176   1              DI = 1;
 177   1      }
 178          
 179          unsigned char shout(void)                       
C51 COMPILER V7.08   WL006                                                                 11/03/2004 11:01:25 PAGE 4   

 180          // 移出数据
 181          {
 182   1              unsigned char i, out_data;
 183   1              for(i = 0; i < 8; i++)
 184   1              {
 185   2                      SK = 1;
 186   2                      out_data <<= 1;
 187   2                      SK = 0;
 188   2                      out_data |= (unsigned char)DO;
 189   2              }
 190   1              return(out_data);
 191   1      }
 192          
 193          void delayms(unsigned char ms)  
 194          // 延时子程序
 195          {                                               
 196   1              unsigned char i;
 197   1              while(ms--)
 198   1              {
 199   2                      for(i = 0; i < 120; i++);
 200   2              }
 201   1      }


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