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

📄 smbus.lst

📁 C8051F读写SMBUS
💻 LST
字号:
C51 COMPILER V8.02   SMBUS                                                                 09/18/2007 10:16:42 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SMBUS
OBJECT MODULE PLACED IN SMBUS.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE SMBUS.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /////////////////////////////////////
   2          //  /////////////begain//////////////
   3          /////////////////////////////////////
   4          
   5          #include "C8051F340.h"
   6          #include <STDIO.H>
   7          #include <INTRINS.H>
   8          #define WRITE 0x00
   9          #define READ 0x01
  10          
  11          #define CHIP_ID 0xc4
  12          #define SMB0STA       SMB0CN&0xFC
  13          #define SMB_START     0xE0
  14          #define SMB_MTDATADD  0xC0
  15          #define SMB_MRDAT     0x88
  16          sbit TTQH6_RST0=P0^6;
  17          bit BUSY;
  18          bit flag=0;
  19          bit rd_flag=0;
  20          char command;
  21          char t_word;
  22          char r_word;
  23          void T3_interrupt(void);
  24          void SmBus_ISR(void);
  25          void SM_Send(char chip_select,unsigned char byte_address,char out_byte);
  26          char SM_Receive(char chip_select,unsigned char byte_address);
  27          unsigned char register_add;
  28          char count;
  29          
  30          /////////////////////////////////////
  31          //  Generated Initialization File  //
  32          /////////////////////////////////////
  33          
  34          #include "C8051F340.h"
  35          
  36          // Peripheral specific initialization functions,
  37          // Called from the Init_Device() function
  38          void PCA_Init()
  39          {
  40   1          PCA0MD    &= ~0x40;
  41   1          PCA0MD    = 0x00;      //禁止看门狗
  42   1      }
  43          
  44          void Timer_Init()
  45          {
  46   1          TCON      = 0x10;
  47   1          TMOD      = 0x02;
  48   1          CKCON     = 0x04;
  49   1          TH0       = 0xEC;  //  200kbps
  50   1      }
  51          
  52          void SMBus_Init()
  53          {
  54   1          SMB0CF    = 0xD0;    // SMBUS允许,从事件禁止,SCL低电平扩展
  55   1      }
C51 COMPILER V8.02   SMBUS                                                                 09/18/2007 10:16:42 PAGE 2   

  56          
  57          void Port_IO_Init()
  58          {
  59   1          // P0.0  -  SDA (SMBus), Open-Drain, Digital
  60   1          // P0.1  -  SCL (SMBus), Open-Drain, Digital
  61   1          // P0.2  -  Unassigned,  Open-Drain, Digital
  62   1          // P0.3  -  Unassigned,  Open-Drain, Digital
  63   1          // P0.4  -  Unassigned,  Open-Drain, Digital
  64   1          // P0.5  -  Unassigned,  Open-Drain, Digital
  65   1          // P0.6  -  Unassigned,  Open-Drain, Digital
  66   1          // P0.7  -  Unassigned,  Open-Drain, Digital
  67   1      
  68   1          // P1.0  -  Unassigned,  Open-Drain, Digital
  69   1          // P1.1  -  Unassigned,  Open-Drain, Digital
  70   1          // P1.2  -  Unassigned,  Open-Drain, Digital
  71   1          // P1.3  -  Unassigned,  Open-Drain, Digital
  72   1          // P1.4  -  Unassigned,  Open-Drain, Digital
  73   1          // P1.5  -  Unassigned,  Open-Drain, Digital
  74   1          // P1.6  -  Unassigned,  Open-Drain, Digital
  75   1          // P1.7  -  Unassigned,  Open-Drain, Digital
  76   1      
  77   1          // P2.0  -  Unassigned,  Open-Drain, Digital
  78   1          // P2.1  -  Unassigned,  Open-Drain, Digital
  79   1          // P2.2  -  Unassigned,  Open-Drain, Digital
  80   1          // P2.3  -  Unassigned,  Open-Drain, Digital
  81   1          // P2.4  -  Unassigned,  Open-Drain, Digital
  82   1          // P2.5  -  Unassigned,  Open-Drain, Digital
  83   1          // P2.6  -  Unassigned,  Open-Drain, Digital
  84   1          // P2.7  -  Unassigned,  Open-Drain, Digital
  85   1      
  86   1          // P3.0  -  Unassigned,  Open-Drain, Digital
  87   1          // P3.1  -  Unassigned,  Open-Drain, Digital
  88   1          // P3.2  -  Unassigned,  Open-Drain, Digital
  89   1          // P3.3  -  Unassigned,  Open-Drain, Digital
  90   1          // P3.4  -  Unassigned,  Open-Drain, Digital
  91   1          // P3.5  -  Unassigned,  Open-Drain, Digital
  92   1          // P3.6  -  Unassigned,  Open-Drain, Digital
  93   1          // P3.7  -  Unassigned,  Open-Drain, Digital
  94   1      
  95   1          XBR0      = 0x04;
  96   1          XBR1      = 0x40;           //SMBUS引脚使能,交叉开关允许    
  97   1      }
  98          
  99          void Oscillator_Init()
 100          {
 101   1          OSCICN    = 0x83;           //12MHz系统时钟
 102   1      }
 103          
 104          void Interrupts_Init()
 105          {
 106   1          EIE1      = 0x01;
 107   1          IE        = 0x80;   //全局中断允许,SMBUS中断允许
 108   1      }
 109          
 110          // Initialization function for device,
 111          // Call Init_Device() from your main program
 112          void Init_Device(void)
 113          {
 114   1          PCA_Init();
 115   1          Timer_Init();
 116   1          SMBus_Init();
 117   1          Port_IO_Init();
C51 COMPILER V8.02   SMBUS                                                                 09/18/2007 10:16:42 PAGE 3   

 118   1          Oscillator_Init();
 119   1          Interrupts_Init();
 120   1      }
 121          
 122          
 123          void Delay(unsigned char x)
 124          {
 125   1          unsigned char i, j;
 126   1          
 127   1          for (i=0; i<x; i++)
 128   1          {
 129   2              for (j=0; j<0xff; j++)
 130   2              {;}
 131   2          }
 132   1      }
 133          void Init_TTQH6(void)     //初始化器件TTQH6
 134          {
 135   1          TTQH6_RST0 = 0;
 136   1          Delay(1);
 137   1          TTQH6_RST0 = 1;
 138   1          Delay(5);
 139   1      }
 140          
 141          
 142          
 143          
 144          void main(void)
 145          {
 146   1      
 147   1        unsigned char check;
 148   1      //  Init_TTQH6();         //初始化器件TTQH6
 149   1          Init_Device();
 150   1         _nop_;
*** WARNING C275 IN LINE 150 OF SMBUS.C: expression with possibly no effect
 151   1      
 152   1         _nop_;
*** WARNING C275 IN LINE 152 OF SMBUS.C: expression with possibly no effect
 153   1      
 154   1         _nop_;
*** WARNING C275 IN LINE 154 OF SMBUS.C: expression with possibly no effect
 155   1      
 156   1         _nop_;
*** WARNING C275 IN LINE 156 OF SMBUS.C: expression with possibly no effect
 157   1      
 158   1         _nop_;
*** WARNING C275 IN LINE 158 OF SMBUS.C: expression with possibly no effect
 159   1      
 160   1         _nop_;
*** WARNING C275 IN LINE 160 OF SMBUS.C: expression with possibly no effect
 161   1      
 162   1          BUSY=0;
 163   1          BUSY=0;
 164   1        //  SM_Send(CHIP_ID,0x01,0x52);
 165   1          check=SM_Receive(CHIP_ID,0x01);
 166   1          while(1);
 167   1      
 168   1      }
 169          
 170          
 171          void SM_Send(char chip_select,unsigned char byte_address,char out_byte)
 172          {
 173   1       while(BUSY);
C51 COMPILER V8.02   SMBUS                                                                 09/18/2007 10:16:42 PAGE 4   

 174   1       BUSY=1;
 175   1      
 176   1       SMB0CF    = 0xD0; //////////////
 177   1      
 178   1       count=2;
 179   1       command=(chip_select|WRITE);
 180   1       register_add=byte_address;
 181   1       t_word=out_byte;
 182   1       STA=1;
 183   1       while(BUSY);
 184   1      
 185   1      
 186   1      
 187   1      }
 188          char SM_Receive(char chip_select,unsigned char byte_address)
 189           {
 190   1       while(BUSY);
 191   1       BUSY=1;
 192   1       count=2;
 193   1       
 194   1       SMB0CF    = 0xD0; //////////
 195   1      
 196   1       rd_flag=1;
 197   1       flag=1;
 198   1       command=chip_select|READ;
 199   1       register_add=byte_address;
 200   1       STA=1;
 201   1       while(BUSY);
 202   1       return r_word;
 203   1      
 204   1       }
 205          void SmBus_ISR(void) interrupt 7
 206          {
 207   1        switch(SMB0STA)
 208   1        {
 209   2          case SMB_START:
 210   2                       SMB0DAT=(command&0xFE);
 211   2                       STA=0;
 212   2                       break;
 213   2          case SMB_MTDATADD: 
 214   2                    if(ACK)
 215   2                              {
 216   3                       
 217   3                              if( rd_flag)
 218   3                              {
 219   4                               SMB0DAT= command;
 220   4                                    rd_flag=0;
 221   4                                        
 222   4                              }
 223   3                              else
 224   3                              {
 225   4                               switch(count)
 226   4                              {
 227   5                               case 2:
 228   5                                   SMB0DAT=register_add;
 229   5                                   count--;
 230   5                                   break;
 231   5                                   case 1:
 232   5                                         if(flag)
 233   5                                         {
 234   6                                              break;
 235   6                                         }
C51 COMPILER V8.02   SMBUS                                                                 09/18/2007 10:16:42 PAGE 5   

 236   5                                         else
 237   5                                      { SMB0DAT=t_word;
 238   6                                        count--;
 239   6                                        break;
 240   6                                           }
 241   5                                   default:
 242   5                                   STO=1;
 243   5                                   BUSY=0;
 244   5                               break;
 245   5                              }
 246   4                                      
 247   4                              }
 248   3                                 }
 249   2                              else
 250   2                  
 251   2                             { STO=1;
 252   3                                  STA=1;
 253   3                                      }
 254   2                              break;
 255   2          case SMB_MRDAT:
 256   2      
 257   2                   r_word=SMB0DAT;
 258   2                       ACK=1;
 259   2                       STO=1;
 260   2               BUSY=0;
 261   2                       break;
 262   2              default:
 263   2                   STO=1;
 264   2               BUSY=0;
 265   2                       break;
 266   2         }
 267   1        SI=0;
 268   1      }
 269          /*void T3_interrupt(void)        interrupt 14
 270          {
 271                   STO=1;
 272                   BUSY=
 273                           TMR3CN&=0x7f;
 274          }
 275          
 276          */
 277          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    254    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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