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

📄 main.lst

📁 F020集成以太网接口核心模块以太网通讯与数据采集例程源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.02   MAIN                                                                  01/16/2008 21:37:44 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\uv3\C51\BIN\C51.EXE main.c LARGE BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS

line level    source

   1          //------------------------------------------------------------------------------
   2          // MN核心模块以太网测试程序
   3          // CGI WEB服务器测试程序
   4          // 版本:V2.1
   5          // 核心模块物理参数:
   6          // 1.主频:22.1184MHZ
   7          // 2.RAM:片内4K,片外32K+256K(MAX)
   8          // 
   9          // COPYRIGHT 2007-2009
  10          //------------------------------------------------------------------------------ 
  11          // 版本记录:
  12          // 版本              日期             内容
  13          // 2007/05/15        1.0             基本WEB测试程序
  14          // 2007/05/20        2.0             增加LED控制的CGI程序
  15          // 2007/06/26        2.1             增加电压和温度采集部分,网页信息自动刷新(JavaScript)
  16          //                                   增加mn_init_m函数,修正程序脱离调试器无法运行的问题
  17          //-------------------------------------------------------------------------------------
  18          // 实验效果:
  19          // 从计算机浏览器中访问http://192.168.0.90,显示数据采集和控制页面
  20          // 1.可以通过页面控制LED2
  21          // 2.页面每两秒自动刷新一次温度和电压数据
  22          //
  23          // 实验条件:
  24          // 1.JP1和JP2所有位处于ON状态
  25          // 2.计算机与核心模块通过交叉网线连接(或两者都使用直联网线连接到HUB或路由器上)
  26          // 3.计算机的IP地址必须为192.168.0.XXX,其中XXX可以为2-254中的数据,但不能为90(因为核心模块为90)
  27          // 4.调解电位器可以观察到网页上的数据变化
  28          // 
  29          // 编译条件:
  30          // 1.使用KEIL C8.0以上版本C51编译器
  31          // 2.使用LARGE RAM模式
  32          // 3.连接选项不使用覆盖分析,即增加连接选项NOOL
  33          //--------------------------------------------------------------------------------------------
  34          
  35          // 
  36          //
  37          #include "mn_userconst.h"                      // TCP/IP Library Constants
  38          #include "mn_stackconst.h"                     // TCP/IP Library Constants
  39          #include "mn_errs.h"                           // Library Error Codes
  40          #include "mn_defs.h"                           // Library Type definitions
  41          #include "mn_funcs.h"                          // Library Function Prototypes
  42          #include "VFILE_DIR\index.h"
  43          #include <c8051F020.h>                         // Device-specific SFR Definitions
  44          
  45          
  46          #include <stdio.h>
  47          #include <ctype.h>                             // for toupper()
  48          
  49          //-------------------------------
  50          // 常量定义
  51          //-------------------------------
  52          #define SYSCLK          22118400
  53          
  54          // AD内部参考电压,由于单片机个体差异,该参考电压可能不同
  55          // 用户可测量J1双排插针的2,3引脚间的电压来调整该值,该值为
C51 COMPILER V8.02   MAIN                                                                  01/16/2008 21:37:44 PAGE 2   

  56          // 测量电压的1000倍
  57          #define AD_VREF         2438
  58          
  59          #define AD_VOLTAGE      0
  60          #define AD_TEMPERATURE  8
  61            
  62          
  63          
  64          
  65          //-----------------------------
  66          // 引脚定义
  67          //-----------------------------
  68          sbit P_LED2  = P3^1;                    // LED2 指示灯
  69          sbit P_RST   = P3^0;                    // CP2201复位引脚
  70          sbit INT_PIN = P2^2;                // CP2201中断引脚
  71          
  72          //------------------------------------------------------------------------------
  73          // Function Prototypes
  74          //------------------------------------------------------------------------------
  75          
  76          // Initialization Routines
  77          void PORT_Init (void);
  78          void SYSCLK_Init (void);
  79          void EMIF_Init(void);
  80          void Timer_Init();
  81          
  82          void UART0_Init();
  83          void SendString(char *pSendString);
  84          
  85          int establish_network_connection();
  86          
  87          void get_data (PSOCKET_INFO socket_ptr);
  88          void get_led(PSOCKET_INFO socket_ptr);
  89          void set_led(PSOCKET_INFO socket_ptr);
  90          
  91          
  92          
  93          void Dlyms(unsigned int ms);              
  94          
  95          void ADC_Init();
  96          void Voltage_Reference_Init();
  97          void DAC_Init();
  98          
  99          unsigned long SampleVoltageAndOut();
 100          long SampleTemperature();
 101          
 102          void InitVariable();
 103          
 104          
 105          //---------------------------------------------
 106          // 全局变量定义
 107          //----------------------------------------------
 108          unsigned char HTML_BUFFER[400];
 109          unsigned char msg_ans[20];
 110          
 111          unsigned long   g_Voltage;         // 电压
 112          long            g_Temperature;     // 温度 
 113          unsigned char   g_ADChannel;
 114          
 115          //------------------------------------------------
 116          // mn_init_m:修正库函数中的mn_init函数
 117          //-------------------------------------------------
C51 COMPILER V8.02   MAIN                                                                  01/16/2008 21:37:44 PAGE 3   

 118          //------------------------------------
 119          // mn_init_m修正函数使用的变量声明
 120          //-----------------------------------
 121          #include <string.h>
 122          
 123          extern byte code NUM_SOCKETS;
 124          extern byte code DEVICE_ID;
 125          extern byte code NUM_VF_PAGES;
 126          extern byte code NUM_POST_FUNCS;
 127          
 128          int  mn_ip_init();
 129          void mn_timer_init();
 130          void mn_http_init();
 131          void mn_arp_init();
 132          
 133          int mn_init_m(void)
 134          {
 135   1              unsigned char chip_id,val,i;
 136   1              int data num;
 137   1              bit c;
 138   1      
 139   1              c = EA;
 140   1          EA = 0;
 141   1          chip_id = DEVICE_ID;
 142   1              if (chip_id != C8051F020)
 143   1                      return  MN_VERIFY_ERROR;
 144   1      
 145   1          // 此处省略了原代码中的器件判断部分
 146   1      
 147   1          //sock_info,在任何情况下必需调用
 148   1              num = (unsigned int)NUM_SOCKETS*sizeof(SOCKET_INFO_T);//0x3D; 
 149   1          val = 0;
 150   1              memset(sock_info,val,num); 
 151   1      
 152   1          //mn_ip_init: 在任何情况下必需调用
 153   1              num = mn_ip_init();
 154   1              if (num!=0)
 155   1              {
 156   2      
 157   2              //mn_timer_init:必需调用
 158   2                      mn_timer_init();
 159   2      
 160   2              //使用DHCP时调用
 161   2              //mn_dhcp_init();
 162   2      
 163   2              //使用BOOTP时调用
 164   2              //mn_bootp_init();
 165   2      
 166   2              //vf_dir init, 在任何情况下必需调用
 167   2                      num = (unsigned int)NUM_VF_PAGES*sizeof(VF);//(0x1F);
 168   2              val = 0;
 169   2                      memset(vf_dir,val,num); 
 170   2      
 171   2              for (i=0;i<NUM_VF_PAGES;i++)
 172   2                                vf_dir[i].cp2200_page_ptr = 0x2000;
 173   2      
 174   2              //page_send_info init,在任何情况下必需调用      
 175   2                      num = (unsigned int)NUM_SOCKETS*sizeof(PAGE_SEND_T); 
 176   2              val = 0;
 177   2                      memset(page_send_info,val,num);
 178   2      
 179   2                      for (i=0;i<NUM_SOCKETS;i++)
C51 COMPILER V8.02   MAIN                                                                  01/16/2008 21:37:44 PAGE 4   

 180   2                                page_send_info[i].cp2200_page_ptr = 0x2000;
 181   2      
 182   2              // pf init,在任何情况下必需调用
 183   2                      num = (unsigned int)NUM_POST_FUNCS*sizeof(POST_FUNCS);//(0x1F);
 184   2              val = 0;
 185   2                      memset(pf,val,num); 
 186   2      
 187   2              //使用HTTP时调用
 188   2                      mn_http_init();                             
 189   2      
 190   2              //使用TFTP时调用
 191   2              //mn_ftp_server_init();
 192   2      
 193   2              //使用SMTP时调用
 194   2              //mn_smtp_init();
 195   2      
 196   2              //在任何情况下必需调用
 197   2                      mn_arp_init();
 198   2                      EA = c;
 199   2                      return  0x0001;
 200   2          }
 201   1              else
 202   1              {
 203   2                       EA = c;
 204   2                       return  MN_INIT_ERROR;
 205   2              }
 206   1      }
 207          
 208          ////////////////////////////////////////////////////////////////////////////////
 209          
 210          // AD中断服务程序
 211          void AD_Isr() interrupt 15
 212          {
 213   1              unsigned int nRet;
 214   1              unsigned long lt;
 215   1              long t;
 216   1      
 217   1              AD0INT = 0;      // 清除中断标志
 218   1      
 219   1              if(g_ADChannel==AD_VOLTAGE)
 220   1              {// 上次采集的是电压值
 221   2                      
 222   2                      // 从DA输出电压
 223   2                      DAC0L = ADC0L;
 224   2                      DAC0H = ADC0H;
 225   2      
 226   2      
 227   2                      nRet = ADC0H;
 228   2                      nRet<<=8;
 229   2                      nRet+=ADC0L;
 230   2              
 231   2                      lt = nRet+1;
 232   2                      lt =lt*AD_VREF;
 233   2                      lt >>=12;
 234   2      
 235   2      
 236   2                      g_Voltage = lt;
 237   2      
 238   2                      g_ADChannel = AD_TEMPERATURE;
 239   2      
 240   2      
 241   2              }
C51 COMPILER V8.02   MAIN                                                                  01/16/2008 21:37:44 PAGE 5   

 242   1              else if(g_ADChannel==AD_TEMPERATURE)
 243   1              {// 上次采集的是温度
 244   2      
 245   2                      nRet = ADC0H<<8;
 246   2                      nRet+=ADC0L;
 247   2              
 248   2                      lt =nRet+1;
 249   2                      lt =lt*AD_VREF;
 250   2                      lt >>=12;
 251   2              
 252   2                      t=lt-776;
 253   2      
 254   2                      g_Temperature = (g_Temperature+t)>>1;  // /2
 255   2      
 256   2      
 257   2                      g_ADChannel = AD_VOLTAGE;
 258   2              }
 259   1              else
 260   1              {
 261   2                      g_ADChannel = AD_VOLTAGE;
 262   2              }
 263   1      
 264   1      
 265   1              AMX0SL   = g_ADChannel;
 266   1              AD0BUSY = 1;                    // 启动转换
 267   1      
 268   1      }
 269          
 270          
 271          //-----------------------------------------------------------------------------
 272          // 主函数
 273          //-----------------------------------------------------------------------------
 274          void main(void)
 275          {
 276   1         data int retval;
 277   1         

⌨️ 快捷键说明

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