51单片机连接rtl8019_1_实现写读PAR0-5
#include
#include
/*SA8ÒÑ?ÓVCC*/
/*ÕâÊǵÚÒ??ö??ʵÏÖ?ù??µÄ??Î????õÊ???ºÍÐ??ÁPAR0-PAR5*/ /*?Ó???º
µ?Æ??ú P20 P21 P22 P23 P24 P25 P00-P07 P32 P34 P36
P37
8019as SA0 SA1 SA2 SA3 SA4 SA9 D0 -D7 IRQ9 RST WR RD
ÆäÖÐP25ÔÚ?ÌÐòÖÐ?ØÐë??ÖÃ?ß*/
//init//////////////////////////////////////////////////////// #define reg00
XBYTE[0x2000]//ÕâÀï?ǵÃP25?ÓÁË8019µÄSA9??Õâ?öÒ???ÒªÒ?Ö?Ϊ1?ÅÄÜÌåÏÖ8019µÄ?ùÖ?Ϊ300H
#define reg01 XBYTE[0x2100]
#define reg02 XBYTE[0x2200]
#define reg03 XBYTE[0x2300]
#define reg04 XBYTE[0x2400]
#define reg05 XBYTE[0x2500]
#define reg06 XBYTE[0x2600]
#define reg07 XBYTE[0x2700]
#define reg08 XBYTE[0x2800]
#define reg09 XBYTE[0x2900]
#define reg0a XBYTE[0x2a00]
#define reg0b XBYTE[0x2b00]
#define reg0c XBYTE[0x2c00]
#define reg0d XBYTE[0x2d00]
#define reg0e XBYTE[0x2e00]
#define reg0f XBYTE[0x2f00]
#define reg10 XBYTE[0x3000]
#define reg18 XBYTE[0x3800]
#define reg1f XBYTE[0x3f00]
/////////////////////////////////////////////////////////////// /////////////////////readmynode/////////////////////////////// #define uchar unsigned char
#define uint unsigned int
///////////////////////////////////////////////////////////////// //#include
#define uchar unsigned char
#define uint unsigned int
sbit reset=P3^4;//Á??Óµ?8019µÄ33?ÅRSTDRV
sbit rd=P3^7;
sbit wr=P3^6;
union u{uint word;struct{uchar high;uchar low;}bytes;}; union u mynodeid[3];//?æ??Íø??µÄÎïÀíµØÖ? union u protocal;//ÁÙÊ??äÁ?
void readmynodeid();
void page(uchar pagenumber);
void ne2000init();
void netcardreset();
void delaymsecond(uint z);
void writemynodeid();
//////////////////////////////////readmynode//////////////////////
//////
void readmynodeid()
{
uchar data i,temp;
page(0);
reg09=0;//RSAR1Ô??ÌÆðÊ?µØÖ??Ä?æÆ?
reg08=0;//RSAR0
reg0b=0;//RBCR1,Ô??Ì×Ö?ÚÊý?Ý?Ä?æÆ???ÉèÖÃÔ??ÌDMAÊýÄê?Ý×Ö?ÚÊý
reg0a=12;//RBCR0
//ÉÏÃæËÄÐÐÊÇÍ??ýÔ??ÌDMA?Ë?ÚÉèÖÃÒª?ÁµÄ8019µÄµØÖ??Á?àÉÙ?ö×Ö?Ú??Ç?12?
ö×Ö?ÚÊÇmacµØÖ?
//ÕâËÄ?ö?Ä?æÆ?×?ÃÅÓÃÓÚ?ÁÈ?8019µÄRAM
reg00=0x0a;//?Á??Æô??ÃüÁî
for(i=0;i<6;i++)
{
temp=reg10;//?ÁÈ?Ò??ö×Ö?Ú
if(i%2==0)
protocal.bytes.high=temp;
else
{
protocal.bytes.low=temp;
mynodeid[i/2].word=protocal.word;
}
temp=reg10;//?ÁÈ?Ò??öÖØ??µÄ×Ö?Ú??Õâ?ö×Ö?Ú???ªÛÍ
}
}
//////////////////////////////////////////////////////////////////
/////////////////
//////////////////////////////////page////////////////////////////
//////////////////
void page(uchar pagenumber)
{
uchar data temp;
temp=reg00;
temp=temp&0x3b;//TXPÎ?ÔÚÆ?Ê?Ò???ÒªÖÃΪ0
pagenumber=pagenumber<<6;
temp=temp|pagenumber;
reg00=temp;
}
////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////ne2000init///////////////////////////////////////////
void ne2000init()
{
reg00=0x21;//RD2Ϊ1??STPΪ1(00100001)76Î?Ñ?ÔñÒ?0µÄ?Ä?æÆ???543Î?Íê?É?ò?áÊøDMµÄ?ÁÐ??Ù×???2Î?Æ?Ê??ÍÊÇ0??10Î?Í?Ö?ÃüÁî
//8019Í?Ö?ÔËÐÐ
reg01=0x4c;//?Ä?æÆ?Pstart??Ò?Ãæ?ªÊ??Ä?æÆ???ÓÐÀ?ÉèÖÃ?ÓÊÕ?º?åÇøµÄ?ªÊ?Ò?Ãæ
//Íø??ÓÐ16K×Ö?ÚµÄRAM??µØÖ?Ϊ0x4000-0x7fff(Ö?µÄÊÇÍø??µÄ?æ??µØÖ?)??Ò?µØÖ?Ϊ0x40-0x7f
//0x40-0x4b×?Ϊ??ËÍ?º?åÇø??0x4c-0x7f×?Ϊ?ÓÊÕ?º?åÇø reg02=0x80;//Pstop??Í?Ö?Ò?????Ö?Äܵ?0x7f??µ?0x80?ÍÍ?Ö? reg03=0x4c;//BNRY???ÓÊÕ?º?åÆ?×îºóÒ?ÃæµÄÖ?Õë???Õ?ªÊ?Ã?ÓÐ?ÓÊÕµ?Êý?Ý?ü??ËùÒÔÖ?Ïò0x4c.
//CURR=BNRY+1
reg04=0x45;//TPSR????ËÍÊý?Ý?ü?ªÊ?Ò?Ãæ
reg0c=0xcc;//RCR???ÓÊÕ?á???Ä?æÆ???76Î?×ÜΪ1??5µ??àÊÓÆ???Ê?Ϊ??ÉèÖÃ???ÓÊÕÊý?Ý?üΪÁ˵ØÖ?Æ?Åä?????ì?â??
ºÃµÄCRCºÍÖ?Í???µ???ÊÇ?æ??Æ?µÄ?º?åÆ??? ?ñÔò??Êý?Ý?ü?????º?åµ??æ??Æ???
//4Î?Ϊ1
Ê??ÓÊÕËùÓÐÊý?Ý?ü??Ϊ0Ê?Ö??ÓÊÕºÍpage0-5ÖÐÒ?ÑùµÄÊý?Ý?ü??3ÊÇ?ñ?ÓÊÕ×é???ü??2ÊÇ?ñ?ÓÊÕ?ã???ü??
//1ÊÇ?ñ?ÓÊÕÐ?ÓÚ64×Ö?ÚµÄ?ü??0ÊÇ?ñ?ÓÊÕÓÐ?íÎóµÄ?ü??ÕâËÄÎ?Èç?ûÊÇ1µÄ???ÓÊÕ??
reg0d=0xe0;//TCR????ÊäÅäÖÃ?Ä?æÆ???765×ÜΪ1??4Ê?ÄÜ???åÍ???????3210ËÄÎ?Éè0ΪÕý???Ù×?
reg0e=0xc8;//DCR??Êý?Ý?á???Ä?æÆ???7×ÜΪ1??65Î?FIFO Æ?Ñ?Î???Ϊ1?òÕß0 ??4×Ô??Ô??Ì?õÊ??? 0?º??ËÍÊý?Ý?ü??ÃüÁî??Ö?ÐÐ1?º??ËÍÊý?Ý?ü??ÃüÁîÖ?ÐÐ
//3210Î?Éè1000ΪÕý???Ù×? reg0f=0x00;//IMR ÆÁ?ÎËùÓÐÖÐ?Ï
page(1); //Ñ?ÔñÒ?1µÄ?Ä?æÆ?
reg07=0x4d;//CURR??µ?Ç??ÓÊÕ?áÊøÒ?µØÖ? reg08=0x00;//MAR0??ÉèÖÃ?àµã??Ë͵Ä?ÎÊý reg09=0x00;//MAR1
reg0a=0x00;//MAR2
reg0b=0x00;//MAR3
reg0c=0x00;//MAR4
reg0d=0x00;//MAR5
reg0e=0x00;//MAR6
reg0f=0x00;//MAR7
reg00=0x22;//Ñ?ÔñÒ?0?Ä?æÆ???Íø???ªÊ???×? //page(2),page(3)????ÓÃÉèÖÃ
}
//////////////////////////////////////////////////////////////////
///////////////
/////////////////////////reset////////////////////////////////////
/////////////////
void netcardreset()
{
unsigned int data i;
unsigned char data temp;
reset=1;//Ê?8019??Î????ßµçÆ???Î?
for(i=0;i<250;i++);//ÑÓÊ?
reset=0;
for(i=0;i<250;i++);//ÑÓÊ?
temp=reg1f;//?ÁÍø????Î??Ë?Ú
reg1f=temp;//Ð?Íø????Î??Ë?Ú
for(i=0;i<25000;i++);//ÑÓÊ?
//??Î?µÄÁ?ÖÖÇé?ö??Ê?ÓÃÁË??ÆäʵÖ?ÒªµÚÒ?ÖÖ?ͺà }
//////////////////////////////////////////////////////////////////
/////////
/////////////////////////////////delay////////////////////////////
//////////
void delaymsecond(uint z)//-----------------Ö?ÑÓÊ?º?Êý1ºÁÃë
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
//////////////////////////////////////////////////////////////////
//////////
/////////////////////writemynodeid///////////////
void writemynodeid()
{
page(1);
reg01=mynodeid[0].bytes.high;//PAR0
reg02=mynodeid[0].bytes.low;//PAR1
reg03=mynodeid[1].bytes.high;//PAR2
reg04=mynodeid[1].bytes.low;//PAR3
reg05=mynodeid[2].bytes.high;//PAR4
reg06=mynodeid[2].bytes.low;//PAR5 }
/////////////////////////////////////////////////
//////////////writedefaultnodeid:12:34:56:78:90:ab////////////////
///
void writedefaultnodeid()//È?Ê?MACΪ112233445566Ð??øPAR0-5
{
page(1);
reg01=0x11;
reg02=0x22;
reg03=0x33;
reg04=0x44;
reg05=0x55;
reg06=0x66;
}
///////////////////////////////////////////////////////
main()
{
uint i;
delaymsecond(10);
netcardreset();
ne2000init();
writedefaultnodeid();
TMOD=0x20;//T1??×?ÔÚ×Ô??ÔÙ×?ÈëµÄ8Î???Ê?Æ???Ê?
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
// EA=1; //Æô??×ÜÖÐ?Ï
//ES=1; //Æô?????ÚÖÐ?Ï*/
page(1);
SBUF=reg01; //Ö?ÒªSBUFÓÐ??Öµ???øÈë??ËÍ?? ??ËÍÍê??ÖÃTI=1??
while(!TI); //µÈ?ý??ËÍÍê,??µÈ?ýTI=1
TI=0;
SBUF=reg02;
while(!TI);
TI=0;
SBUF=reg03;
while(!TI);
TI=0;
SBUF=reg04;
while(!TI);
TI=0;
SBUF=reg05;
while(!TI);
TI=0;
SBUF=reg06;
while(!TI);
TI=0;
while(1);
}