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

📄 at45main.lst

📁 F020集成以太网接口核心模块DataFlash例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 277   1          // P1.0  -  Skipped,     Open-Drain, Analog
 278   1          // P1.1  -  Skipped,     Open-Drain, Analog
 279   1          // P1.2  -  Skipped,     Open-Drain, Analog
 280   1          // P1.3  -  Skipped,     Open-Drain, Analog
 281   1          // P1.4  -  Skipped,     Open-Drain, Analog
 282   1          // P1.5  -  Skipped,     Open-Drain, Analog
 283   1          // P1.6  -  Skipped,     Open-Drain, Analog
 284   1          // P1.7  -  Skipped,     Open-Drain, Analog
 285   1      
 286   1          // P2.0  -  TX1 (UART1), Open-Drain, Digital
 287   1          // P2.1  -  RX1 (UART1), Open-Drain, Digital
 288   1          // P2.2  -  INT0 (Tmr0), Open-Drain, Digital
 289   1          // P2.3  -  INT1 (Tmr1), Open-Drain, Digital
 290   1          // P2.4  -  Unassigned,  Open-Drain, Digital
 291   1          // P2.5  -  Unassigned,  Open-Drain, Digital
 292   1          // P2.6  -  Unassigned,  Open-Drain, Digital
 293   1          // P2.7  -  Unassigned,  Open-Drain, Digital
 294   1      
 295   1          // P3.0  -  Unassigned,  Open-Drain, Digital
 296   1          // P3.1  -  Unassigned,  Push-Pull,  Digital
 297   1          // P3.2  -  Unassigned,  Open-Drain, Digital
 298   1          // P3.3  -  Unassigned,  Open-Drain, Digital
 299   1          // P3.4  -  Unassigned,  Open-Drain, Digital
 300   1          // P3.5  -  Unassigned,  Open-Drain, Digital
 301   1          // P3.6  -  Unassigned,  Open-Drain, Digital
 302   1          // P3.7  -  Unassigned,  Open-Drain, Digital
 303   1      
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 6   

 304   1          P1MDIN    = 0x00;
 305   1              P0MDOUT   = 0x14;
 306   1          P3MDOUT   = 0x02;
 307   1              P74OUT    = 0xFF;
 308   1      
 309   1          XBR0      = 0x07;
 310   1          XBR1      = 0x14;
 311   1          XBR2      = 0x44;
 312   1      
 313   1      }
 314          
 315          
 316          void Oscillator_Init()
 317          {
 318   1          int i = 0;
 319   1          OSCXCN    = 0x67;
 320   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
 321   1          while ((OSCXCN & 0x80) == 0);
 322   1          OSCICN    = 0x08;
 323   1      }
 324          
 325          void Interrupts_Init()
 326          {
 327   1              //..................................
 328   1              // 初始化中断
 329   1              // EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
 330   1          //..................................
 331   1          IE  = 0;
 332   1      
 333   1              ET0 = 1;        // 打开定时器0中断
 334   1      
 335   1              
 336   1              ES0 = 1;        // 使能串口中断
 337   1              
 338   1      
 339   1      }
 340          
 341          //-------------------------------
 342          // 功能:    初始化单片机内部资源
 343          // 输入参数:无
 344          // 输出参数:无
 345          //-------------------------------
 346          void Init_Device(void)
 347          {
 348   1          Timer_Init();
 349   1              
 350   1              EMI_Init();
 351   1      
 352   1          Port_IO_Init();
 353   1      
 354   1          Oscillator_Init();
 355   1              
 356   1              UART0_Init();
 357   1              InitSMBus();
 358   1              SPI_Init();
 359   1      
 360   1          Interrupts_Init();
 361   1      }
 362          
 363          //------------------------------------------------
 364          // 函数名称:InitVariable()
 365          // 函数功能:初始化系统全局变量
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 7   

 366          //------------------------------------------------
 367          void InitVariable()
 368          {
 369   1              g_cMainSignal = 0;
 370   1      
 371   1              g_sTime.base  = 0;
 372   1              g_sTime.second= 0;
 373   1              g_sTime.minute= 0;
 374   1              
 375   1              g_cRecvPointer =0;
 376   1              g_cRecvLength  =0;
 377   1      
 378   1      
 379   1      }
 380          
 381          //-------------------------------------------------------------
 382          // 函数名称:定时器0中断入口函数,完成计时功能,定时时间为25ms
 383          // 输入参数: 无
 384          // 输出参数: 无
 385          //-------------------------------------------------------------
 386          
 387          void timer0() interrupt 1
 388          {
 389   1              TH0=TMR0H;
 390   1              TL0=TMR0L;
 391   1      
 392   1              // 程序时基信号
 393   1              if(++g_sTime.base>=TICKS_PER_SEC)
 394   1              {// 1s到
 395   2                      g_sTime.base = 0;
 396   2      
 397   2                      g_cMainSignal|=SECD_SIGNAL;      // 产生秒信号
 398   2      
 399   2                      if(++g_sTime.second>59)
 400   2                      {// 1分钟到
 401   3                              g_sTime.second = 0;
 402   3      
 403   3                              g_cMainSignal|=MINU_SIGNAL;  // 产生分信号
 404   3      
 405   3                              if(++g_sTime.minute>59) g_sTime.minute=0;
 406   3                      }
 407   2              }
 408   1      
 409   1      
 410   1      
 411   1      }
 412          
 413          //..................................................
 414          // 串口0中断服务程序
 415          // 
 416          //.................................................
 417          void Uart0() interrupt 4
 418          {
 419   1              BYTE cRecvData;
 420   1      
 421   1              if(RI0)                                                              // 如果收到数据
 422   1              {
 423   2                      RI0=0;                                                       // 清除收到数据标志
 424   2                      
 425   2                      cRecvData = SBUF0;                           // 读取数据
 426   2                      SBUF0 = cRecvData;                   // 回显
 427   2      
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 8   

 428   2                      if(cRecvData=='\r')
 429   2                      {// 回车符作为结束标志
 430   3                              g_cRecvBuffer[g_cRecvPointer]=0; // 接收结束
 431   3                              g_cRecvPointer = 0;
 432   3      
 433   3                              g_cMainSignal|=UART0RECV_SIGNAL; // 接收完成信号
 434   3                              
 435   3                      }
 436   2                      else if(cRecvData==0x08)
 437   2                      {// CTRL+H控制键,退格
 438   3                              if(g_cRecvPointer>0) g_cRecvPointer--;
 439   3                      }
 440   2                      else                    
 441   2                      {
 442   3                              if(g_cRecvPointer<RECVBUF_LEN)
 443   3                              {
 444   4                                      /*                              
 445   4                                      // 检查是否有数据需要转换为小写
 446   4                                      if(isupper(cRecvData))
 447   4                                      {// 大写字符转换为小写
 448   4                                              cRecvData = _tolower(cRecvData);
 449   4                                      }
 450   4                                      */
 451   4                                      g_cRecvBuffer[g_cRecvPointer++]=cRecvData;
 452   4      
 453   4                                      
 454   4                              }
 455   3                              else
 456   3                              {// 数据长度错误
 457   4                                      g_cRecvPointer = 0;
 458   4                              }
 459   3                      }
 460   2                      
 461   2      
 462   2              }
 463   1      
 464   1              if(TI0)                                                         // 如果数据发送结束
 465   1              {
 466   2                      TI0=0;          
 467   2              }
 468   1              
 469   1      }
 470          
 471          
 472          //------------------------------------------------------------------
 473          // 主函数开始
 474          //-------------------------------------------------------------------
 475          void main()
 476          {
 477   1              BYTE nDeviceID;
 478   1      
 479   1              Init_Device();        // 初始化系统
 480   1              InitVariable();       // 初始化变量
 481   1              
 482   1              EA=0;                             // 禁止看门狗
 483   1              WDTCN = 0xDE;         // 实验中不使用看门狗
 484   1              WDTCN = 0xAD;   
 485   1              
 486   1      
 487   1              EA = 1;               // 打开中断控制位
 488   1               
 489   1          TR0  = 1;             // 启动定时器0
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 9   

 490   1      
 491   1              SendString("C8051F02x core Module EC1,v1.0\r\n");
 492   1              SendString("Serial Flash Test\r\n");
 493   1              
 494   1              //////////////////////////////////////////////////
 495   1              // 检查Flash
 496   1              /////////////////////////////////////////////////
 497   1              SendString("Flash ID:");
 498   1              SendString(GetFlashType());
 499   1              SendString("\r\n");
 500   1              ////////////////////////////////////////////////
 501   1              
 502   1      
 503   1              while(1)
 504   1              {
 505   2      
 506   2                      if(g_cMainSignal&SECD_SIGNAL)
 507   2                      {// 秒信号
 508   3                              g_cMainSignal&=~SECD_SIGNAL;
 509   3                              
 510   3                              P_LED2 = !P_LED2;
 511   3                      }
 512   2      
 513   2                      if(g_cMainSignal&MINU_SIGNAL)
 514   2                      {// 分信号
 515   3                              g_cMainSignal&=~MINU_SIGNAL;
 516   3      
 517   3                      }
 518   2      
 519   2                      if(g_cMainSignal&UART0RECV_SIGNAL)
 520   2                      {// UART0接收完成信号
 521   3                              g_cMainSignal&=~UART0RECV_SIGNAL;
 522   3                              
 523   3                              // 确保接收缓冲区内的字符串有结尾
 524   3                              g_cRecvBuffer[RECVBUF_LEN-1] = 0;
 525   3                              // 分析接收的命令
 526   3                              CommandProc(g_cRecvBuffer);
 527   3      
 528   3                      }
 529   2      
 530   2              }
 531   1      
 532   1      }
*** WARNING C280 IN LINE 477 OF AT45MAIN.C: 'nDeviceID': unreferenced local variable
 533          
 534          //------------------------------------------------------------------
 535          // 功能:分析接收的串口命令
 536          // 输入参数:pRecvString,char *:输入字符串
 537          // 输出参数:无
 538          //..................................................................
 539          
 540          void CommandProc(char *pRecvString)
 541          {
 542   1              BYTE cRet=0;
 543   1              int  iPos,iPage,i;
 544   1      
 545   1              // 使用strncmps进行不区分大小写的比较
 546   1              if(strncmps("setled=",pRecvString,7)==0)
 547   1              {// 设置LED状态命令
 548   2                      
 549   2                      pRecvString+=7;
 550   2                      
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 10  

 551   2                      iPos=strpos(pRecvString,',');
 552   2      
 553   2                      if(iPos==-1)
 554   2                      {// 无效命令
 555   3                              cRet = 0;
 556   3                      }
 557   2                      else
 558   2                      {

⌨️ 快捷键说明

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