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

📄 main.lst

📁 本程序使用C8051F040芯片与CP2200实现单片机与以太网互联。
💻 LST
📖 第 1 页 / 共 3 页
字号:
 220   1              CP220x_RST_High();
 221   1          INT0EN = 0x03;                         
 222   1          INT1EN = 0x00;                                                       // 清除中断标志位
 223   1         
 224   1                                 
 225   1          error_code = PHY_Init();         
 226   1          MAC_Init();    
 227   1          ET2 = 1;                        
 228   1              RXCN = RXCLEAR;
 229   1          EA  =  1;
 230   1          IP = 0x01;
 231   1          SFRPAGE = EMI0_PAGE;
 232   1              
 233   1         // 下面代码为设置何种事件中断发生,以做出相应的处理
 234   1              while (1)
 235   1         {
 236   2            
 237   2                 if(CPINFOH & RXVALID)  
 238   2                event_word |= EVENT_ETH_ARRIVED;
 239   2                event_word_copy = event_word;
 240   2                        EA = 1;
C51 COMPILER V7.50   MAIN                                                                  12/14/2006 13:34:45 PAGE 5   

 241   2             if (event_word_copy & EVENT_ETH_ARRIVED)
 242   2                {
 243   3                    EA = 0;
 244   3                    event_word &= (~EVENT_ETH_ARRIVED);
 245   3                    EA = 1;
 246   3                    inbuf = rcve_frame();
 247   3                    if (inbuf != NULL)
 248   3                      {
 249   4                        eth_rcve(inbuf); 
 250   4                           if (rcve_buf_allocated)
 251   4                        {
 252   5                                         rcve_buf_allocated = FALSE;
 253   5                        }
 254   4                       }
 255   3                 }
 256   2            
 257   2                                     
 258   2            else if (event_word_copy & EVENT_TCP_RETRANSMIT) //判断TCP传输是否超时
 259   2            {
 260   3               event_word &= (~EVENT_TCP_RETRANSMIT);
 261   3               EA = 1;
 262   3               tcp_retransmit();
 263   3                      }
 264   2      
 265   2             else if (event_word_copy & EVENT_TCP_INACTIVITY)//判断TCP休止时间
 266   2            {
 267   3               event_word &= (~EVENT_TCP_INACTIVITY);
 268   3               EA = 1;
 269   3               tcp_inactivity();
 270   3                      }
 271   2      
 272   2           
 273   2                      else if (event_word_copy & EVENT_ARP_RETRANSMIT) //判断ARP传输是否超时
 274   2            {
 275   3               event_word &= (~EVENT_ARP_RETRANSMIT);
 276   3               EA = 1;
 277   3               arp_retransmit();
 278   3                      }
 279   2      
 280   2           else if (event_word_copy & EVENT_AGE_ARP_CACHE)
 281   2            {
 282   3               event_word &= (~EVENT_AGE_ARP_CACHE);
 283   3                              EA = 1;
 284   3               age_arp_cache();
 285   3                      }
 286   2      
 287   2                      else if (event_word_copy & EVENT_READ_ANALOG)   //读AD输入的时间
 288   2            {
 289   3               event_word &= (~EVENT_READ_ANALOG);
 290   3               EA = 1;
 291   3                      
 292   3                              read_analog_inputs();
 293   3            }
 294   2      
 295   2              
 296   2                      else if (event_word_copy & EVENT_RS232_ARRIVED)
 297   2            {
 298   3               event_word &= (~EVENT_RS232_ARRIVED);
 299   3               EA = 1;
 300   3            }
 301   2         }
 302   1      }
C51 COMPILER V7.50   MAIN                                                                  12/14/2006 13:34:45 PAGE 6   

 303          /**********************************************************************/
 304          //CP2200片选置低
 305          /*********************************************************************/
 306          
 307          void CP220x_RST_Low(void)
 308          {
 309   1         char SFRPAGE_SAVE = SFRPAGE;        
 310   1         SFRPAGE = CONFIG_PAGE;
 311   1         P4 &= ~0x20;                        
 312   1         SFRPAGE=SFRPAGE_SAVE;
 313   1      }
 314          
 315          /***********************************************************************/
 316          
 317          //CP2200片选置高
 318          /***********************************************************************/
 319          void CP220x_RST_High(void)
 320          {
 321   1            char SFRPAGE_SAVE = SFRPAGE;       
 322   1         SFRPAGE = CONFIG_PAGE;
 323   1      
 324   1          P4 |= 0x20;                       
 325   1         SFRPAGE=SFRPAGE_SAVE;
 326   1      }
 327          /***********************************************************************/
 328          //物理层出始化
 329          
 330          /***********************************************************************/
 331          unsigned char PHY_Init()
 332          {
 333   1         unsigned char temp_char;
 334   1         unsigned char retval = 0;
 335   1         
 336   1         //--------------------------------------------------------------------------
 337   1         //以下部分为物理层自适应同步,详见CP2200数据手册
 338   1         //--------------------------------------------------------------------------
 339   1      
 340   1         
 341   1            PHYCN = 0x00;  // 禁止物理层寄存器
 342   1         
 343   1         
 344   1            TXPWR = 0x80;
 345   1            PHYCF = ( SMSQ | JABBER | ADPAUSE | AUTOPOL );
 346   1      
 347   1            // 使能物理层 
 348   1            PHYCN = PHYEN;
 349   1           
 350   1            // 物理层上电
 351   1                
 352   1            PHYCN = ( PHYEN | TXEN | RXEN ); //  使能传输与接收寄存器
 353   1                // 唤醒中断
 354   1           
 355   1                 
 356   1            temp_char = INT1;
 357   1      
 358   1       
 359   1           
 360   1      
 361   1         //--------------------------------------------------------------------------
 362   1         //以下是物理层初始化
 363   1         //--------------------------------------------------------------------------
 364   1         
C51 COMPILER V7.50   MAIN                                                                  12/14/2006 13:34:45 PAGE 7   

 365   1         
 366   1          PHYCN = 0x00; //禁止物理层寄存器
 367   1        
 368   1         
 369   1          PHYCF = ( SMSQ | LINKINTG | JABBER | AUTONEG | ADPAUSE | AUTOPOL ); //进行连接完整性与自适应配置
 370   1         
 371   1          PHYCN = PHYEN;//使能物理层
 372   1          PHYCN = ( PHYEN | TXEN | RXEN ); //  使能传输与接收寄存器
 373   1        
 374   1      
 375   1         
 376   1            temp_char = INT1;
 377   1                
 378   1            while(1){
 379   2               
 380   2                      if(INT1RD & (ANCINT | ANFINT))break;     // 判断初始化是成功
 381   2                                   
 382   2                     }
 383   1      
 384   1            temp_char = INT1RD;
 385   1            temp_char &= (ANCINT | ANFINT);
 386   1      
 387   1            
 388   1            if(temp_char & ANFINT)          // 检测自适应是否失败 
 389   1                   {
 390   2                retval = LINK_ERROR;
 391   2                       } 
 392   1                else 
 393   1                                                                             
 394   1            
 395   1                 if(temp_char == ANCINT)        // 检测自适应是否通过
 396   1                       {
 397   2                      retval = 0;
 398   2                          IOPWR = 0x0C;         // 使能 Link LED and Activity LED 
 399   2                       }
 400   1                         else     
 401   1                   { 
 402   2                    retval = LINK_ERROR;
 403   2                       }
 404   1      
 405   1           return retval;
 406   1           
 407   1      }
 408          
 409          /***********************************************************************/
 410          //数据链路层初始化
 411          /***********************************************************************/
 412          
 413          void MAC_Init(void)
 414          {  
 415   1      
 416   1         //判断是否为全双工通讯,并进行相关设置 详见CP2200数据手册
 417   1         if(PHYCN & 0x10)
 418   1           {
 419   2            MAC_Write(MACCF, 0x40B3);
 420   2            MAC_Write(IPGT, 0x0015);
 421   2            } 
 422   1         else 
 423   1           {
 424   2                MAC_Write(MACCF, 0x4012);
 425   2            MAC_Write(IPGT, 0x0012); 
 426   2               }
C51 COMPILER V7.50   MAIN                                                                  12/14/2006 13:34:45 PAGE 8   

 427   1            MAC_Write(IPGR, 0x0C12);
 428   1            MAC_Write(MAXLEN, 0x05EE);
 429   1      
 430   1         // 读出厂前设置的MAC地址
 431   1         FLASHADDRH = 0x1F;
 432   1         FLASHADDRL = 0xFA;
 433   1      
 434   1         MYMAC.Char[0] = FLASHAUTORD;
 435   1         MYMAC.Char[1] = FLASHAUTORD;
 436   1         MYMAC.Char[2] = FLASHAUTORD;
 437   1         MYMAC.Char[3] = FLASHAUTORD;
 438   1         MYMAC.Char[4] = FLASHAUTORD;
 439   1         MYMAC.Char[5] = FLASHAUTORD;      
 440   1         my_hwaddr[0]=MYMAC.Char[0];
 441   1         my_hwaddr[1]=MYMAC.Char[1];
 442   1         my_hwaddr[2]=MYMAC.Char[2];
 443   1         my_hwaddr[3]=MYMAC.Char[3];
 444   1         my_hwaddr[4]=MYMAC.Char[4];
 445   1         my_hwaddr[5]=MYMAC.Char[5];
 446   1        

⌨️ 快捷键说明

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