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

📄 sp3530.lst

📁 工业以太网测控板资料FX04核心编程模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
 179   1              SFRPAGE   = CONFIG_PAGE;
C51 COMPILER V7.05   SP3530                                                                03/19/2007 15:47:59 PAGE 4   

 180   1              WDTCN = 0xde;                                                                   // disable watchdog timer
 181   1              WDTCN = 0xad;
 182   1              
 183   1              OSCICN |= 0x03;                                                         // Set internal oscillator to highest setting
 184   1                                                                                                                      // (16 MHz)
 185   1      
 186   1              XBR0 |= 0x07;                                                                   // Route SMBus to GPIO pins through crossbar
 187   1              XBR2 |= 0x44;                                                                   // Enable crossbar and weak pull-ups
 188   1      
 189   1          P0MDOUT |= 0x1D; 
 190   1          P1MDOUT |= 0x01; 
 191   1              SFRPAGE   =SMB0_PAGE;
 192   1              SMB0CN=0x00;
 193   1              SMB0CN = 0x44;                                                                  // Enable SMBus with ACKs on acknowledge cycle
 194   1              SMB0CR = -80;                                                                   // SMBus clock rate = 100kHz.
 195   1          SFRPAGE   = CONFIG_PAGE;
 196   1              EIE1 |= 2;                                                                              // SMBus interrupt enable
 197   1              EA = 1;                                                                                 // Global interrupt enable
 198   1      
 199   1              SM_BUSY = 0;                                                                    // Free SMBus for first transfer.
 200   1          if(!BUSY)
 201   1              BUSY=1;
 202   1              BUSY=1;
 203   1              _nop_();
 204   1              _nop_();
 205   1              BUSY=0;
 206   1              BUSY=0;
 207   1              _nop_();
 208   1              _nop_();
 209   1      //      SetRealClockINT1(0x8000);
 210   1              var = GetRealClockStatus();
 211   1              ResetRealClock();
 212   1              var = GetRealClockStatus();
 213   1              SetRealClockStatus(0x82);
 214   1              var = GetRealClockStatus();
 215   1              RealTime.RT.Year=0x02;  
 216   1              RealTime.RT.Month=0x06; 
 217   1              RealTime.RT.Day=0x05;   
 218   1              RealTime.RT.Week=0x03;  
 219   1              RealTime.RT.Hour=0x11;  
 220   1              RealTime.RT.Minute=0x59;        
 221   1              RealTime.RT.Second=0x45;        
 222   1              SetRealClock();
 223   1      //      RealTime.RT.Year=0x0;   
 224   1      //      RealTime.RT.Month=0x0;  
 225   1      //      RealTime.RT.Day=0x0;    
 226   1      //      RealTime.RT.Week=0x0;   
 227   1      //      RealTime.RT.Hour=0x0;   
 228   1      //      RealTime.RT.Minute=0x0; 
 229   1      //      RealTime.RT.Second=0x0; 
 230   1              GetRealClock();
 231   1      /*      RealTime.RT.Year=0x02;  
 232   1              RealTime.RT.Month=0x06; 
 233   1              RealTime.RT.Day=0x05;   
 234   1              RealTime.RT.Week=0x02;  
 235   1              RealTime.RT.Hour=0x11;  
 236   1              RealTime.RT.Minute=0x14;        
 237   1              RealTime.RT.Second=0x45;        
 238   1      */
 239   1      //      SetRealClock();
 240   1              GetRealClock();
 241   1              GetRealClock();
C51 COMPILER V7.05   SP3530                                                                03/19/2007 15:47:59 PAGE 5   

 242   1              GetRealClock();
 243   1              GetRealClock();
 244   1              while(1)
 245   1              {
 246   2                GetRealClock();
 247   2              }
 248   1      }
 249          
 250          
 251          //------------------------------------------------------------------------------------
 252          // Interrupt Service Routine
 253          //------------------------------------------------------------------------------------
 254          void SMBUS_ISR (void) interrupt 7
 255          {
 256   1              switch (SMB0STA)
 257   1                      {       // SMBus 状态码SMB0STA 寄存器
 258   2                              // 主发送器/接收器起始条件已发送
 259   2                      case SMB_START:
 260   2                              SFRPAGE   =SMB0_PAGE;
 261   2                              SMB0DAT = COMMAND ; // 装入要访问的从器件的地址
 262   2                              STA = 0;                        // 手动清除START 位
 263   2                              break;
 264   2                              //主发送器/接收器重复起始条件已发送
 265   2                              // 该状态只应在读操作期间出现在存储器地址已发送并得到确认之后 ?
 266   2                      case SMB_RP_START:
 267   2                         SFRPAGE   =SMB0_PAGE;
 268   2                              SMB0DAT = COMMAND; // COMMAND 中应保持从地址 + R.
 269   2                              STA = 0;
 270   2                              break;
 271   2                              // 主发送器从地址 + WRITE 已发送收到ACK
 272   2                      case SMB_MTADDACK:
 273   2                              // 主发送器数据字节已发送收到ACK
 274   2                      case SMB_MTDBACK:
 275   2                              if (BYTE_NUMBER)
 276   2                              {           
 277   3                                          SFRPAGE   =SMB0_PAGE;
 278   3                                              SMB0DAT = revolve(*I2CDataBuff);                                        // If R/W=WRITE, load byte to write.
 279   3                                              I2CDataBuff++;
 280   3                                              BYTE_NUMBER--;                  
 281   3                              }
 282   2                              else
 283   2                              {
 284   3                                  SFRPAGE   =SMB0_PAGE;
 285   3                                      STO = 1;        SM_BUSY = 0;                                            // Free SMBus
 286   3                              }
 287   2                              break;
 288   2                              // 主发送器从地址 + WRITE 已发送收到NACK
 289   2                              // 从器件不应答发送STOP + START 重试
 290   2                      case SMB_MTADDNACK:
 291   2                              SFRPAGE   =SMB0_PAGE;
 292   2                              STO = 1;                        STA = 1;
 293   2                      break;
 294   2                              // 主发送器数据字节已发送收到NACK
 295   2                              // 从器件不应答发送STOP + START 重试
 296   2                      case SMB_MTDBNACK:
 297   2                              SFRPAGE   =SMB0_PAGE;
 298   2                              STO = 1;                        STA = 1;
 299   2                      break;
 300   2                              // 主发送器竞争失败
 301   2                              // 不应出现如果出现重新开始传输过程
 302   2                      case SMB_MTARBLOST:
 303   2                              SFRPAGE   =SMB0_PAGE;
C51 COMPILER V7.05   SP3530                                                                03/19/2007 15:47:59 PAGE 6   

 304   2                              STO = 1;                        STA = 1;
 305   2                      break;
 306   2      
 307   2                              // 主接收器从地址 + READ 已发送,收到ACK
 308   2                      case SMB_MRADDACK:
 309   2                              AA = 1; // 在应答周期ACK
 310   2                              if (!BYTE_NUMBER)
 311   2                              {       
 312   3                                      SFRPAGE   =SMB0_PAGE;
 313   3                                      STO = 1;        SM_BUSY = 0; // 释放SMBus
 314   3                              }
 315   2                      break;
 316   2                              // 主接收器从地址 + READ 已发送收到NACK
 317   2                              // 从器件不应答发送重复起始条件重试
 318   2                      case SMB_MRADDNACK:
 319   2                              STA = 1;
 320   2                      break;
 321   2                              // 收到数据字节ACK 已发送
 322   2                              // 该状态不应出现因为AA 已在前一状态被清0 如果出现发送停止条件
 323   2                      case SMB_MRDBACK:
 324   2                              if (BYTE_NUMBER)
 325   2                              {
 326   3                                      *I2CDataBuff=revolve(SMB0DAT);          
 327   3                                      I2CDataBuff++;
 328   3                                      BYTE_NUMBER--;                  
 329   3                              }
 330   2                              if (!BYTE_NUMBER)       AA= 0;
 331   2                      break;
 332   2                              // 收到数据字节NACK 已发送
 333   2                              // 读操作已完成读数据寄存器后发送停止条件
 334   2                      case SMB_MRDBNACK:
 335   2                              SFRPAGE   =SMB0_PAGE;
 336   2                              STO = 1;
 337   2                              SM_BUSY = 0; // 释放SMBus
 338   2                      break;
 339   2                              // 在本应用中所有其它状态码没有意义通信复位
 340   2                      default:
 341   2                          SFRPAGE   =SMB0_PAGE;
 342   2                              STO = 1; // 通信复位
 343   2                              SM_BUSY = 0; 
 344   2                      break;
 345   2                      }
 346   1              SI=0; // 清除中断标志
 347   1      }


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