📄 main.lst
字号:
186
187 //*****************************************************************************
188 //
189 // Callback for when DHCP client has been configured.
190 //
191 //*****************************************************************************
192 void
193 dhcpc_configured(const struct dhcpc_state *s)
194 {
195 1 uip_sethostaddr(&s->ipaddr);
196 1 uip_setnetmask(&s->netmask);
197 1 uip_setdraddr(&s->default_router);
198 1 //DisplayIPAddress((void *)&s->ipaddr, 18, 24);
199 1 }
200
201 /*------------------------------------------------------------------*/
202 void PORT_Init (void)
203 {
204 1 P0MDOUT |= 0x81; /* enable TX0 as a push-pull output*/
205 1
206 1 P1MDOUT |= 0x4f; /*Set P1.6(TB_LED) to push-pull*/
207 1 P2MDOUT |= 0x28; /* Set P2.2(AB4_LED1)*/
208 1 P74OUT = 0xFF; /*推挽方式*/
209 1 P3MDOUT |= 0Xff;
210 1
211 1 P4 = 0xC0; /* /WR, /RD, are high, RESET is low*/
212 1 P5 = 0xFF;
213 1 P6 = 0xFF; /* P5, P6 contain the address lines*/
214 1 P7 = 0xFF; /* P7 contains the data lines*/
215 1
216 1 TCON &= ~0x01; /*Make /INT0 level triggered*/
217 1 /*定时器控制寄存器*/
218 1
219 1
220 1
221 1 /*Enable UART0, CP0, and /INT0. This puts /INT0 on P0.3*/
222 1 XBR0 = 0x84; /*CP0连接到端口引脚 RX0 TX0 连接到2个端口引脚*/
223 1 XBR1 = 0x04; /*INT0连接到端口引脚*/
224 1 XBR2 = 0x40; /*交叉开关允许*/
225 1
226 1
227 1 TCON &= ~0x01; /* Make /INT0 level triggered*/
228 1
229 1 EMI0CF = 0xFB; /* Split-mode, non-multiplexed on P0 - P3*/
230 1 /*外部存储器接口配置 P4-P7 非复用*/
231 1 /*ALE高低电平宽度 =4个sysclk周期*/
232 1 /*带块选择的分片 方式 ,寻址低于 4KB边界的地址时*/
233 1 /*访问 片内 存储器 ,反之,访问片外存储器。*/
234 1 /*8位片外MOVX操作使用EMI0CN的内容作为地址的高字节*/
235 1
236 1 EMI0TC = 0xef; /* This constant may be modified*/
237 1 /* according to SYSCLK to meet the*/
238 1 /* timing requirements for the CP2200*/
239 1 /* 外部 存储器时序控制*/
240 1
C51 COMPILER V9.00 MAIN 02/08/2010 20:58:31 PAGE 5
241 1 /*11 1011 11 =0xEF*/
242 1 /*地址建立时间 3个SYSCLK周期 11 */
243 1 /*WR和/RD脉宽= 12个SYSCLK周期 1011*/
244 1 /* 地址保持时间 =3个SYSCLK周期 11 */
245 1
246 1
247 1
248 1 EMI0CN = 0x20; /* Page of XRAM accessed by EMIF*/
249 1 /* XRAM页选择位,当使用8位的MOVX命令时XRAM页选择位提供16位*/
250 1 /*外部数据存储器地址的高字节,实际上是 选择一个256B的RAM页 */
251 1 /* 0x2000__0x20ff 外部存储器接口控制*/
252 1 /* EX0 = 1; */
253 1
254 1
255 1
256 1 }
257
258 /********************************************************************************
259 // 初始化定时器0
260 ********************************************************************************/
261 void Timer0_Init (void)
262 {
263 1 CKCON|=0x8; /* 时钟控制寄存器 计数器/定时器使用系统时钟*/
264 1 TMOD|=0x1; /*16Bit 方式1 16位计数器/定时器*/
265 1 Count10ms=10;
266 1 Count1s=0;
267 1 TR0 = 0; /* STOP Timer0*/
268 1 TH0 = (-SYSCLK/1000) >> 8; /* set Timer0 to overflow in 1ms*/
269 1 TL0 = -SYSCLK/1000;
270 1 TR0 = 1; /* START Timer0*/
271 1 IE|= 0x2;
272 1 }
273
274
275 /********************************************************************************
276 ** 晶振初始化
277 ********************************************************************************/
278
279 void SYSCLK_Init (void)
280 {
281 1 int i; /* delay counter*/
282 1
283 1 OSCXCN = 0x67; /* start external oscillator with*/
284 1 /* 22.1184MHz crystal*/
285 1
286 1 for (i=0; i < 256; i++) ; /* wait for oscillator to start*/
287 1
288 1 while (!(OSCXCN & 0x80)) ; /* Wait for crystal osc. to settle*/
289 1
290 1 OSCICN = 0x88; /*select external oscillator as SYSCLK*/
291 1 /* source and enable missing clock*/
292 1 /* detector*/
293 1
294 1
295 1 }
296 /********************************************************************************
297 // 定时器0 溢处 中断
298 ********************************************************************************/
299 void Timer0_ISR (void) interrupt 1 /*1ms*/
300 {
301 1 TH0 = (-SYSCLK/1000) >> 8;
302 1 TL0 = -SYSCLK/1000;
C51 COMPILER V9.00 MAIN 02/08/2010 20:58:31 PAGE 6
303 1
304 1
305 1 tick_cnt++;
306 1 if (Count1ms) Count1ms--;
307 1 Count1msInc++;
308 1 if (Count10ms) Count10ms--;
309 1 else
310 1 {
311 2 Count10ms=10; /*10ms*/
312 2 if (Count1s) Count1s--;
313 2
314 2 else
315 2 {
316 3
317 3 Count1s=100; /*1s*/
318 3 TimeSecond++;
319 3 if (TimeSecond>=60)
320 3 {
321 4 TimeSecond=0; /*1min*/
322 4 TimeMinute++;
323 4 if (TimeMinute==60) TimeMinute=0;
324 4 }
325 3 }
326 2 }
327 1 }
328
329 /***************************************************************************
330 ** Timer 2 interrupt service routing. Intr vector location is
331 ** address 0x002B. The timer generates an interrupt every 25 msec
332 ** It is set to auto reload so do not need to reload it.
333 ***************************************************************************/
334 void timer2_interrupt(void) interrupt 5 //对应TIME2中断
335 {
336 1 TF2 = 0; // Clear interrupt flag
337 1 }
338
339 /***************************************************************************
340 ** Setup Timer2 in mode 1 which is 16 bit auto reload
341 ** Intr rate = 22.1184 MHz /(12 * (65536 - reload value))
342 ** For 25 msec reload value = 19456 = 0x4C00
343 ***************************************************************************/
344 void Timer2_Init(void)
345 {
346 1 T2CON = 0x00;
347 1 RCAP2H = 0x4C; // Reload value
348 1 RCAP2L = 0x00;
349 1 TH2 = 0x4C; // Initial load value
350 1 TL2 = 0x00;
351 1 TR2 = 1; // Timer 2 run
352 1 ET2 = 1; /* Enable timer 2 interrupt*/
353 1 }
354
355 /********************************************************************************
356 // 延 时 t ms
357 ********************************************************************************/
358 void Delay1ms(unsigned char T)
359 {
360 1 Count1ms=T;
361 1 while (Count1ms);
362 1 }
363
364
C51 COMPILER V9.00 MAIN 02/08/2010 20:58:31 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1005 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = 15 16
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -