📄 net.lst
字号:
238 2 OVER_Process(); //OVER报处理函数
239 2 return 1;
C51 COMPILER V7.06 NET 02/28/2008 17:09:34 PAGE 5
240 2 }
241 1 else
242 1 return 0;
243 1 }
244 //*********************************************************************
245 bit WRQ_Process(void)
246 {
247 1 s=0; //秒计数器清零
248 1 H_Package=Receive_Buff[48];
249 1 H_Package<<=8;
250 1 H_Package+=Receive_Buff[49]; //取出总数据块数
251 1 ACK_Send(0);
252 1 return 1;
253 1 }
254 //*********************************************************************
255 bit DATA_Process(void)
256 {
257 1 unsigned char i;
258 1 ms=0; //毫秒计数器清零
259 1 Package=Receive_Buff[48];
260 1 Package<<=8;
261 1 Package+=Receive_Buff[49]; //取出当前块数
262 1 if(Package!=Count_Pag)
263 1 return 0;
264 1 else
265 1 {
266 2 Count_Pag++; //计数器加一
267 2 for(i=0;i<512;i++)
268 2 DATA_Buff[i]=Receive_Buff[i+50]; //取出有效数据
269 2 ACK_Send(Package);
270 2 return 1;
271 2 }
272 1 }
273 //*********************************************************************
274 bit OVER_Process(void)
275 {
276 1 ms=0; //毫秒计数器清零
277 1 H_Package=Receive_Buff[48];
278 1 H_Package<<=8;
279 1 H_Package+=Receive_Buff[49]; //取出总数据块数
280 1 return 1;
281 1 }
282 //*********************************************************************
283 void Config_Timmer(void)
284 {
285 1 TMOD=0x01; //定时器零工作与16位方式
286 1 TL0=0x66;
287 1 TH0=0xFC;
288 1 ET0=1; //定时器零中断使能
289 1 EA=1; //开总中断
290 1 TR0=1;
291 1 }
292 //*********************************************************************
293 void timmer0() interrupt 1 using 1
294 {
295 1 TR0=0;
296 1 TL0=0x66;
297 1 TH0=0xFC;
298 1 if(ms>=999)
299 1 {
300 2 ms=0;
301 2 if(s>=59)
C51 COMPILER V7.06 NET 02/28/2008 17:09:34 PAGE 6
302 2 {
303 3 s=0;
304 3 if(min>=59)
305 3 min=0;
306 3 else
307 3 min++;
308 3 }
309 2 else
310 2 s++;
311 2 }
312 1 else
313 1 ms++;
314 1 TR0=1;
315 1 }
316 //************************************************************************
317 void PORT_Init (void)
318 {
319 1 // XBR0 = 0x07; // Enable SMBus, SPI0, and UART0
320 1 // XBR1 = 0x00;
321 1 // XBR2 = 0x44; // Enable crossbar and weak pull-ups
322 1 // EMI0TC = 0x21;
323 1 // P74OUT = 0xFF;
324 1 //P0MDOUT = 0x15;
325 1 //P3MDOUT=0xff;
326 1 //P1MDOUT=0xff;
327 1 //P2MDOUT=0xff;
328 1 }
329 //************************************************************************
330 void RTL8019_init(void)
331 {
332 1 unsigned char i;
333 1 unsigned char j;
334 1 for(i=0;i<255;i++)
335 1 for(j=0;j<255;j++);
336 1 Reset_8019(); //复位8019
337 1 //chip_select(); //片选
338 1 page_select(0);
339 1 reg00=0x21; //020与8019通信禁止,发送禁止,即进入停止状态
340 1 for(i=0;i<255;i++)
341 1 for(j=0;j<255;j++);
342 1 reg0a=0x00;
343 1 reg0b=0x00; //020与8019通信字节计数器清零
344 1 reg0c=0xe0; //接受禁止
345 1 reg0d=0xe2; //发送禁止,使用CRC
346 1 reg01=0x4c; //配置接受缓存起始页地址
347 1 reg02=0x80; //配置接收缓存结束页地址
348 1 reg03=0x4c; //接收缓存边界页地址
349 1 reg04=0x40; //发送缓存起始页地址
350 1 reg07=0xff; //清中断标志
351 1 reg0f=0x00; //终止所有中断
352 1 reg0e=0xc8; //8位DMA
353 1 page_select(1); //选择第一页
354 1 reg07=0x4d; //接收缓冲区首页地址
355 1 reg08=0x00;
356 1 reg09=0x00;
357 1 reg10=0x00;
358 1 reg0a=0x00;
359 1 reg0b=0x00;
360 1 reg0c=0x00;
361 1 reg0d=0x00;
362 1 reg0e=0x00;
363 1 reg0f=0x00; //地址过滤位
C51 COMPILER V7.06 NET 02/28/2008 17:09:34 PAGE 7
364 1 reg00=0x22; //RTL8019工作使能
365 1 // read_mac_add(); //读取物理地址
366 1 write_mac_add(); //写物理地址至ram
367 1 page_select(0); //选择第零页
368 1 reg0c=0xcc; //接收使能
369 1 reg0d=0xe0;
370 1 reg00=0x22; //RTL8019工作使能
371 1 reg07=0xff; //清中断位
372 1 //read_reg(reg0f,reg00,0x00,16);
373 1 }
374 //***********************************************************
375 void Reset_8019(void)
376 {
377 1 unsigned char i;
378 1 unsigned char j;
379 1
380 1 unsigned char tmp;
381 1
382 1 Reset_High;
383 1 for(i=0;i<255;i++)
384 1 for(j=0;j<255;j++);
385 1 Reset_Low;
386 1 for(i=0;i<255;i++)
387 1 for(j=0;j<255;j++);
388 1
389 1
390 1 tmp = reg1f;
391 1 reg1f = tmp;
392 1
393 1 for(i=0;i<255;i++)
394 1 for(j=0;j<255;j++);
395 1 }
396 //***********************************************************
397 /*void read_mac_add(void)
398 {
399 unsigned char i;
400 page_select(0);
401 reg09=0x00; //读取物理地址的ram地址为0x0000
402 reg08=0x00;
403 reg0b=0x00;
404 reg0a=0x12;
405 reg00=0x0a; //020读RTL8019
406 for(i=0;i<6;i++)
407 {
408 mac_add[i]=reg10;
409 }
410 }*/
411 //***********************************************************
412 void page_select(unsigned char pagenumber)
413 {
414 1 unsigned char data temp;
415 1 temp=reg00;
416 1 temp=temp&0x3B ;
417 1 pagenumber=pagenumber <<6;
418 1 temp=temp | pagenumber;
419 1 reg00=temp;
420 1 }
421 //***********************************************************
422
423 //***********************************************************
424 void SYSCLK_Init (void)
425 {
C51 COMPILER V7.06 NET 02/28/2008 17:09:34 PAGE 8
426 1 int i; // delay counter
427 1 // OSCXCN = 0x67; // start external oscillator with
428 1 // 18.432MHz crystal
429 1 for (i=0; i < 256; i++) ; // Wait for osc. to start up
430 1 // while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
431 1 // OSCICN = 0x88; // select external oscillator as SYSCLK
432 1 // source and enable missing clock
433 1 }
434 //***********************************************************
435 void write_mac_add(void)
436 {
437 1 page_select(1);
438 1 reg01=hard_add[0];
439 1 reg02=hard_add[1];
440 1 reg03=hard_add[2];
441 1 reg04=hard_add[3];
442 1 reg05=hard_add[4];
443 1 reg06=hard_add[5];
444 1 page_select(0);
445 1 }
446 //***********************************************************
447 void RTL8019_send(void)
448 {
449 1 unsigned int length=64;
450 1 unsigned char i;
451 1 reg09=0x40; //设置发送起始页高地址
452 1 reg08=0x00; //发送起始页地地址
453 1 reg0b=length>>8; //字节计数器高字节
454 1 reg0a=length&0xff; //字节计数器低字节
455 1 reg00=0x12; //020写RTL8019
456 1 for(i=0;i<length;i++)
457 1 {
458 2 reg10=Send_Buff[i];
459 2 }
460 1 reg0b=0x00;
461 1 reg0a=0x00;
462 1 reg00=0x22; //断开020与RTL8019的连接
463 1 for(i=0;i<6;i++) //开始发送数据,最多重发六次
464 1 {
465 2 for(i=0;i<1000;i++)
466 2 {
467 3 if((reg00&0x04)==0) //查询TXP位确认发送状态
468 3 break;
469 3 }
470 2 if((reg04&0x01)!=0) //查询PTX位确认发送是否完成切无错误
471 2 break;
472 2 reg00=0x3e; //发送数据包
473 2 }
474 1 reg07=0xff; //清中断
475 1 reg04=0x40; //发送缓冲起始页
476 1 reg06=length>>8; //发送字节高位
477 1 reg05=length&0xff; //发送字节低位
478 1 reg07=0xff; //清中断
479 1 reg00=0x3e;
480 1 }
481 //***********************************************************************
482 //***********************************************************************
483 bit RTL8019_receive(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -