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

📄 wl006.lst

📁 周立功的51单片机试验例程,我当年就是靠这个学会单片机的
💻 LST
字号:
C51 COMPILER V7.08   WL006                                                                 02/17/2004 12:01:26 PAGE 1   


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

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

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

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