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

📄 main._c

📁 网卡驱动程序
💻 _C
字号:
//*01. 本程序的晶体为 7.3728mHz  ATMEGA128 
//*02. 网卡板UDP的IP: 192.168.1.201          
//*03. 网卡板UDP的端口: 9000                 
//*04. 网卡板MAC: { 0, 0, 'a', 'b', 'c', 'd' }     
//*05. 网卡板: 192.168.1.201  9000          
//*06. 远程电脑IP: 192.168.1.160            
//*07. 远程电脑端口: 9000                   
//*08. 远程电脑MAC: { 0, 0x10, 0xB5, 0xAC, 0xF1, 0x31 }  
//*09. 无网关(GATE)
//*10. 无子网掩码(MASK)

//#include <string.h>
//#include <stdio.h>
#include <iom128v.h>
#include <macros.h>

#include "Delay_7.37M.h"
#include "Lcd7920.h"
#include "Usart1_M128.h"
#include "Rtl8019as_Ethernet_M128.h"
#include "Rtl8019as_M128.h"

//设置网络默认值
unsigned char MY_IP[4] = { 192,168,1,201 };
unsigned char MY_PORT[2] = { 0x23,0x28 }; //端口9000
unsigned char MY_MAC[6] = { 0,0,'a','b','c','d' };

unsigned char REMOTE_IP[4] = { 192,168,1,160};
unsigned char REMOTE_PORT[2] = { 0x23,0x28 }; //端口9000
unsigned char REMOTE_MAC[6] = { 0,0x10,0xB5,0xAC,0xF1,0x31 };

#define  set_packet32(d,s) packet[d] = make8(s,3);   \
                           packet[d+1] = make8(s,2); \
                           packet[d+2] = make8(s,1); \
                           packet[d+3]= make8(s,0); 
						   
#define make8(var,offset)	(var >> (offset * 8)) & 0xFF
#define	make16(varhigh,varlow)	((varhigh & 0xFF)* 0x100) + (varlow & 0xFF)
#define make32(var1,var2,var3,var4) \
		((unsigned long)var1<<24)+((unsigned long)var2<<16)+ \
		((unsigned long)var3<<8)+((unsigned long)var4)		

unsigned char  flg_arp;   


void DoWithUart(void);     //处理串口接收



void main(void)
{
   CLI();
   UART1_Init();   //串口初始化要放在8019初始化前面,以免向串口发空乱数据   
   LCD_Init();
  
   Rtl8019as_Init();
   
   //网络数据初始化  (--改用memcpy)
   nodRemote.cIp[0]= REMOTE_IP[0];
   nodRemote.cIp[1]= REMOTE_IP[1];
   nodRemote.cIp[2]= REMOTE_IP[2];
   nodRemote.cIp[3]= REMOTE_IP[3];   
   nodRemote.cPort[0]=REMOTE_PORT[0];
   nodRemote.cPort[1]=REMOTE_PORT[1];   
   nodRemote.cMac[0]= REMOTE_MAC[0];
   nodRemote.cMac[1]= REMOTE_MAC[1];
   nodRemote.cMac[2]= REMOTE_MAC[2];
   nodRemote.cMac[3]= REMOTE_MAC[3];
   nodRemote.cMac[4]= REMOTE_MAC[4];
   nodRemote.cMac[5]= REMOTE_MAC[5];
   
   nodLoc.cIp[0]=MY_IP[0];
   nodLoc.cIp[1]=MY_IP[1];
   nodLoc.cIp[2]=MY_IP[2];
   nodLoc.cIp[3]=MY_IP[3];
   nodLoc.cPort[0]=MY_PORT[0];
   nodLoc.cPort[1]=MY_PORT[1];   
   nodLoc.cMac[0]= MY_MAC[0];
   nodLoc.cMac[1]= MY_MAC[1];
   nodLoc.cMac[2]= MY_MAC[2];
   nodLoc.cMac[3]= MY_MAC[3];
   nodLoc.cMac[4]= MY_MAC[4];
   nodLoc.cMac[5]= MY_MAC[5];
   
   flg_arp='f';
   
   //delay_ms(1500);  //keep it, wait for arp 
   
   LCD_WriteStrAuto("Wan tst 080123B");
   SEI();
   
   UART1_Puts("12345abc");
 
//******************************************************************
//*	Look for a packet in the receive buffer ring
//******************************************************************
   while(1)
   {   
         //Delay_nms_Preci(1500); 	   
	     //串口接收处理
         if (flg_Received )   
	     {
	        DoWithUart();	  
	     }   

/*      //start the NIC
      write_rtl(CR,0x22);		  

      //wait for a good packet
      while(!(PIND & INT0_pin))  //循环, 直到INT0为高电平, 执行后面的程序
	  {
         //if (flg_arp=='f')  
         //{ 
         //   sendarp(); delay_ms(350);
         // }	 
		  
	     //串口接收处理
         if (flg_Received )   
	     {
	        DoWithUart();	  
	     }   
	  }

      //read the interrupt status register
      read_rtl(ISR);

      //if the receive buffer has been overrun
      if(byte_read & OVW)
         overrun();

      //if the receive buffer holds a good packet
      if(byte_read & PRX)
         get_frame();

      //make sure the receive buffer ring is empty
      //if BNRY = CURR, the buffer is empty
         read_rtl(BNRY);
         data_L = byte_read;
         write_rtl(CR,0x62);
         read_rtl(CURR);
         data_H = byte_read;
         write_rtl(CR,0x22);
      //buffer is not empty.. get next packet
	  
         if(data_L != data_H)
            get_frame();

      //reset the interrupt bits
      write_rtl(ISR,0xFF);	 
	  */ 
   }

}

void DoWithUart(void)
{
   UART1_Puts("uart in ok");
   Delay_nus(5);   
  
   //UdpSendoutStr("12345",5);
		 
   Delay_nus(5);   
   flg_Received=0;   
}




⌨️ 快捷键说明

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