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

📄 main.lst

📁 《Proteus在MCS-51&ARM7系统中的应用百例》逆向之 Chapter 8 《Proteus在MCS-51&ARM7系统中的应用百例》MCS-51例子的C语言版本。 最
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 12:48:49 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: D:\Program Files\Keil 8.08\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND SRC(.\main.SRC)

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          
   4          typedef unsigned char BYTE;
   5          
   6          sbit SDA=P1^5;
   7          sbit SCL=P1^4;
   8          bit ACK;
   9          BYTE SLA;
  10          BYTE SUBA;
  11          BYTE NUMBYTE;
  12          
  13          BYTE MTD[0x0F];
  14          BYTE MRD[0x0F];
  15          
  16          
  17          void IWRNBYTE();
  18          void IRDNBYTE();
  19          void START();
  20          void STOP();
  21          void MACK();
  22          void MNACK();
  23          void CACK();
  24          void WRBYTE(BYTE in);
  25          BYTE RDBYTE();
  26          
  27          
  28          
  29          main()
  30          {
  31   1              BYTE delay=0xF0;
  32   1              BYTE offset=0;
  33   1              BYTE i,j,k;
  34   1      
  35   1              while(--delay);
  36   1      
  37   1              while(offset<0x10)
  38   1              {
  39   2                      MTD[offset]=offset;     
  40   2              }
  41   1      
  42   1              SLA=0xA0;
  43   1              SUBA=0x30;
  44   1              NUMBYTE=16;
  45   1              IWRNBYTE();
  46   1      
  47   1              i=20;
  48   1      
  49   1              do
  50   1              {
  51   2                      j=248;
  52   2                      do
  53   2                      {
  54   3                              k=248;
  55   3                              do
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 12:48:49 PAGE 2   

  56   3                              {}while(--k);
  57   3                      }while(--j);
  58   2              }while(--i);
  59   1      
  60   1              SLA=0xA0;
  61   1              SUBA=0x30;
  62   1              NUMBYTE=16;
  63   1              IRDNBYTE();
  64   1      }
  65          
  66          
  67          void IWRNBYTE()
  68          {
  69   1              BYTE i;
  70   1              BYTE offset;
  71   1      
  72   1      dd:
  73   1              i=NUMBYTE;
  74   1              offset=0;
  75   1      
  76   1              START();
  77   1              WRBYTE(SLA);
  78   1              CACK();
  79   1              if(!ACK)
  80   1              {
  81   2                      STOP(); return; 
  82   2              }
  83   1              WRBYTE(SUBA);
  84   1              CACK();
  85   1      
  86   1              do
  87   1              {       
  88   2                      WRBYTE(MTD[offset]);
  89   2                      CACK();
  90   2                      if(!ACK) goto dd;
  91   2                      offset++;               
  92   2              }while(--i);
  93   1      
  94   1              STOP();
  95   1      }
  96          
  97          void IRDNBYTE()
  98          {
  99   1              BYTE offset;
 100   1              BYTE num;
 101   1      qq:
 102   1              offset=0;
 103   1              num=NUMBYTE;
 104   1              
 105   1      
 106   1              START();
 107   1              WRBYTE(SLA);
 108   1              CACK();
 109   1              if(!ACK) 
 110   1              {
 111   2                      STOP();
 112   2                      return; 
 113   2              }
 114   1              WRBYTE(SUBA);
 115   1          CACK();
 116   1              START();
 117   1          WRBYTE(++SLA);
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 12:48:49 PAGE 3   

 118   1              CACK();
 119   1              if(!ACK) goto qq;
 120   1      
 121   1              do
 122   1              {
 123   2                      MRD[offset]=RDBYTE;     
 124   2                      MACK();
 125   2                      offset++;
 126   2              }while(--num);
 127   1      
 128   1              MNACK();
 129   1              STOP();
 130   1      }
 131          
 132          void START()
 133          {
 134   1              SDA=1;          //发送起始条件数据信号
 135   1              _nop_();        //起始条件建立时间大于4.7us
 136   1              SCL=1;          //发送起始条件的时钟信号
 137   1              _nop_();                                        
 138   1              _nop_();
 139   1              _nop_();
 140   1              _nop_();
 141   1              _nop_();        //起始条件锁定时间大于4.7us
 142   1              SDA=0;          //发送起始信号
 143   1              _nop_();
 144   1              _nop_();
 145   1              _nop_();
 146   1              _nop_();        //起始条件锁定时间大于4.7us
 147   1              SCL=0;          //钳住I2C总线,准备发送或接收数据
 148   1              _nop_();
 149   1      }
 150          
 151          void STOP()
 152          {
 153   1              SDA=0;          //发送停止条件的数据信号
 154   1              _nop_();                                
 155   1              _nop_();
 156   1              SCL=1;          //发送停止条件的时钟信号
 157   1              _nop_();
 158   1              _nop_();
 159   1              _nop_();
 160   1              _nop_();
 161   1              _nop_();        //起始条件建立时间大于4.7us
 162   1              SDA=1;          //发送I2C总线停止信号
 163   1              _nop_();
 164   1              _nop_();
 165   1              _nop_();
 166   1              _nop_();
 167   1              _nop_();        
 168   1      }
 169          
 170          void MACK()
 171          {
 172   1              SDA=0;          //将SDA置0
 173   1              _nop_();
 174   1              _nop_();
 175   1              SCL=1;
 176   1              _nop_();
 177   1              _nop_();
 178   1              _nop_();
 179   1              _nop_();
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 12:48:49 PAGE 4   

 180   1              _nop_();        //保持数据时间,大于4.7us
 181   1              SCL=0;
 182   1              _nop_();
 183   1              _nop_();
 184   1      }
 185          
 186          void MNACK()
 187          {
 188   1              SDA=1;          //将SDA置1
 189   1              _nop_();
 190   1              _nop_();
 191   1              SCL=1;
 192   1              _nop_();
 193   1              _nop_();
 194   1              _nop_();
 195   1              _nop_();
 196   1              _nop_();
 197   1              SCL=0;          //保持数据时间,大于4.7us
 198   1              _nop_();
 199   1              _nop_();
 200   1      }
 201          
 202          void CACK()
 203          {
 204   1              SDA=1;
 205   1              _nop_();
 206   1              _nop_();
 207   1              SCL=1;
 208   1              ACK=0;
 209   1              _nop_();
 210   1              _nop_();
 211   1      
 212   1              if(SDA)
 213   1                      ACK=1;
 214   1              _nop_();
 215   1              SCL=0;
 216   1              _nop_();                        
 217   1      }
 218          
 219          void WRBYTE(BYTE in)
 220          {
 221   1              BYTE num=8;
 222   1              ACC=in;
 223   1      
 224   1              do
 225   1              {
 226   2                      #pragma asm
 227   2                              RLC A
 228   2                      #pragma endasm
 229   2              
 230   2                      if(CY)
 231   2                      {
 232   3                              SDA=1;                  
 233   3                              _nop_();
 234   3                              SCL=1;
 235   3                              _nop_();
 236   3                              _nop_();
 237   3                              _nop_();
 238   3                              _nop_();
 239   3                              _nop_();
 240   3                              SCL=0;
 241   3                      }
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 12:48:49 PAGE 5   

 242   2                      else
 243   2                      {
 244   3                              SDA=0;          
 245   3                              _nop_();
 246   3                              SCL=1;
 247   3                              _nop_();
 248   3                              _nop_();
 249   3                              _nop_();
 250   3                              _nop_();
 251   3                              _nop_();
 252   3                              SCL=0;  
 253   3                      }
 254   2              }while(--num);
 255   1              
 256   1                      
 257   1      }
 258          
 259          BYTE RDBYTE()
 260          {
 261   1              BYTE num=8;
 262   1              
 263   1              do
 264   1              {
 265   2                      SDA=1;
 266   2                      _nop_();
 267   2                      SCL=1;          //      时钟线为高,接收数据位
 268   2                      _nop_();
 269   2                      _nop_();
 270   2                      CY=SDA;
 271   2                      SCL=0;
 272   2                      
 273   2                      #pragma asm
 274   2                              RLC A
 275   2                      #pragma endasm
 276   2                      
 277   2                      _nop_();
 278   2                      _nop_();
 279   2                      _nop_();
 280   2              }while(--num);
 281   1      
 282   1              return ACC;     
 283   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    321    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     33       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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