📄 main.lst
字号:
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 + -