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

📄 text1.lst

📁 SMBUS对eeprom的操作
💻 LST
字号:
C51 COMPILER V7.06   TEXT1                                                                 11/29/2006 11:07:47 PAGE 1   


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

stmt level    source

   1          #include <c8051f020.h>
   2          #include <niao.h>
   3          #define SomeNop()    _nop_();_nop_();_nop_();_nop_();_nop_();\
   4          ////////)///////////////全局变量//////////////////////////////////
   5          char COMMAND;
   6          char WORD;
   7          char BYTE_NUMBER;
   8          unsigned char HIGH_ADD,LOW_ADD;
   9          bit SMB_BUSY;
  10          //////////////////////全局变量/////////////////////////////////
  11          
  12          
  13          
  14          
  15          
  16          //////////////////////函数原型声明//////////////////////////
  17          void SMBus_ISR(void);
  18          void SM_Send(unsigned int byte_address,char out_byte);
  19          char SM_Receive(unsigned int byte_address);
  20          void SYSCLK_Init(void);
  21          void PortInit(void);
  22          //////////////////////函数原型声明//////////////////////////
  23          
  24          
  25          
  26          
  27          //////////////////////////主程序///////////////////////////////////
  28          void main(void)
  29          {
  30   1         unsigned char check;
  31   1         WDTCN=0xde;
  32   1         WDTCN=0xad;
  33   1         
  34   1         SYSCLK_Init();
  35   1         PortInit();
  36   1         
  37   1         SMB0CN=0x44;
  38   1         SMB0CR=-90;
  39   1         
  40   1         EIE1|=2;
  41   1         EA=1;
  42   1         SomeNop();
*** WARNING C206 IN LINE 42 OF TEXT1.C: '_nop_': missing function-prototype
*** ERROR C264 IN LINE 42 OF TEXT1.C: intrinsic '_nop_': declaration/activation error
  43   1         SomeNop();
  44   1      
  45   1         SMB_BUSY=0;
  46   1         SMB_BUSY=0;
  47   1         SMB_BUSY=0;
  48   1         
  49   1         /////////////////测试程序代码///////////////////////
  50   1         
  51   1      
  52   1         check=SM_Receive(0x0099);
  53   1         SM_Send(0x0099,0x44);
C51 COMPILER V7.06   TEXT1                                                                 11/29/2006 11:07:47 PAGE 2   

  54   1         check=SM_Receive(0x0099);
  55   1         
  56   1         
  57   1         
  58   1         
  59   1         
  60   1         
  61   1         
  62   1         
  63   1         
  64   1         
  65   1         
  66   1         
  67   1         
  68   1         
  69   1         while(1);
  70   1         /////////////////测试程序代码///////////////////////////
  71   1      }
  72          //////////////////////////////主程序////////////////////////////////////
  73          
  74          
  75          
  76          
  77          /////////////////////////////////功能函数定义////////////////////////////////
  78          void SYSCLK_Init(void)
  79             {
  80   1            int j=0;
  81   1            OSCXCN=0x67;
  82   1      
  83   1         for (j=0; j < 256; j++) ;           // XTLVLD blanking interval (>1ms)
  84   1      
  85   1         while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
  86   1      
  87   1         OSCICN = 0x88; 
  88   1         }
  89          void PortInit(void)
  90             {
  91   1         XBR0    = 0x01;                     // Enable SPI0
  92   1         XBR1    = 0x00;
  93   1         XBR2    = 0x40;                     // Enable crossbar and weak pull-ups  
  94   1         P0MDOUT=0xff;
  95   1         }
  96             
  97             
  98             
  99             
 100          void SM_Send(unsigned int byte_address,char out_byte)
 101          {    
 102   1           
 103   1           while(SMB_BUSY);
 104   1           SMB_BUSY=1;
 105   1           SMB0CN=0x44;
 106   1           BYTE_NUMBER=2;
 107   1           COMMAND=(0xA0|WRITE);
 108   1           HIGH_ADD=((byte_address>>8)&0x00ff);
 109   1           LOW_ADD=(byte_address&0x00ff);
 110   1           WORD=out_byte;
 111   1           STA=1;
 112   1      }
 113          
 114          
 115          
C51 COMPILER V7.06   TEXT1                                                                 11/29/2006 11:07:47 PAGE 3   

 116          
 117          char SM_Receive(unsigned int byte_address)
 118          
 119          {  
 120   1        
 121   1         while(SMB_BUSY);
 122   1         SMB_BUSY=1;
 123   1         SMB0CN=0x44;
 124   1         BYTE_NUMBER=2;
 125   1         COMMAND=(0xA0|READ);
 126   1         HIGH_ADD=((byte_address>>8)&0x00ff);
 127   1         LOW_ADD=(byte_address&0x00ff);
 128   1         STA=1;
 129   1         while(SMB_BUSY);
 130   1         return WORD;
 131   1      }   
 132          
 133          /////////中断服务程序/////////
 134          void SMBus_ISR(void) interrupt 7
 135          {
 136   1        switch(SMB0STA)
 137   1        {
 138   2        case SMB_START:
 139   2             SMB0DAT=(COMMAND&0xFE);
 140   2             STA=0;
 141   2             break;
 142   2        case SMB_RP_START:
 143   2             SMB0DAT=COMMAND;
 144   2             STA=0;
 145   2             break;
 146   2        case SMB_MTADDACK:
 147   2             SMB0DAT=HIGH_ADD;
 148   2             break;
 149   2        case SMB_MTADDNACK:
 150   2             STO=1;
 151   2             STA=1;
 152   2             break;
 153   2        case SMB_MTDBACK:
 154   2             switch(BYTE_NUMBER)
 155   2             {
 156   3                case 2:
 157   3                     SMB0DAT=LOW_ADD;
 158   3                     BYTE_NUMBER--;
 159   3                     break;
 160   3                case 1:
 161   3                     if(COMMAND&0x01)
 162   3                        STA=1;
 163   3                     else
 164   3                        {
 165   4                         SMB0DAT=WORD;
 166   4                         BYTE_NUMBER--;
 167   4                        }
 168   3                     break;
 169   3                default:
 170   3                     STO=1;
 171   3                     SMB_BUSY=0;   
 172   3                     
 173   3             }
 174   2             break;
 175   2         case SMB_MTDBNACK:
 176   2            STO=1;
 177   2            STA=1;
C51 COMPILER V7.06   TEXT1                                                                 11/29/2006 11:07:47 PAGE 4   

 178   2            break;
 179   2         case SMB_MRADDACK:
 180   2            AA=0;
 181   2            break;
 182   2         case SMB_MRADDNACK:
 183   2            STA=1;
 184   2            break;
 185   2         case SMB_MRDBNACK:
 186   2            WORD=SMB0DAT;
 187   2            STO=1;
 188   2            SMB_BUSY=0;
 189   2            break;  
 190   2          default:
 191   2            STO=1;
 192   2            SMB_BUSY=0;
 193   2            break;  
 194   2        
 195   2        }
 196   1        SI=0;
 197   1      
 198   1      }
 199          
 200          
 201          /////////中断服务程序/////////
 202          
 203          
 204          /////////////////////////////////功能函数定义////////////////////////////////

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

⌨️ 快捷键说明

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