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

📄 test.c

📁 51单片机控制网卡实现上网程序代码
💻 C
字号:
/**************************************************************

   (for test only)

**************************************************************/
#include "hostmcu.h"
#include "card9346.h"
#include "my93c46.h"
#include "8019.h"
/**************************************************************/

void n2k_main(void);

/**************************************************************/
//At OSC_24
// 1 = 256 * 0.5us = 128 us = 0.128 ms
// 80 = 10 ms
#define OV_VAL 250

/**************************************************************/

uchar nodeid[6];

/**************************************************************/

uchar code VERSION_STR[]="\n>Test Program Run OK.\n";
//uchar code dummy[1024*20];

uchar rbuf[64];

ulong ticks=0;

/**************************************************************/
void trans_str(uchar *str)
{
   uchar idx;

   for(idx=0;idx<strlen(str);idx++)
      trans_com(str[idx]);
}

/**************************************************************/
void delay(void)
{
   uint idx;
   for(idx=0;idx<(uint)0x1fff;idx++);
}

/**************************************************************/
void main(void)
{
   uchar a,b;
   uint dat;
   uint idx;
   init_serial();
   trans_str(VERSION_STR);
   //EA=1;

   HARD_RST();

   //write_93c46(0x02,0x5452);

   /*
   SET_PAGE(3);
   myoutportb(0x01,0x80);
   mw_init();
   for(idx=0;idx<0x10;idx++)
   {
      dat=mw_read(idx);
      trans_hex(dat&0xff);
      trans_hex((dat>>8)&0xff);
   }
   myoutportb(0x01,0x00);

   while(1);

   for(idx=0;idx<0x40;idx++)
   {
      trans_hex(read_93c46(idx)&0xff);
      trans_hex((read_93c46(idx)>>8)&0xff);
   }

   while(1);

   */
   dma_read_nodeid(nodeid);
   trans_str("\nnodeid: ");
   for(idx=0;idx<6;idx++)
   {
      trans_hex(nodeid[idx]);
   }
   set_nodeid(nodeid);
   SET_PAGE(0);

   n2k_main();
   /*
   trans_com('\n');
   for(a=0;a<4;a++)
   {
      SET_PAGE(a);
      for(b=0;b<0x10;b++)
         trans_hex(myinportb(b));
      trans_com('\n');
   }

   HARD_RST();
   */

/*
   trans_hex(myinportb(0x0a));
   trans_hex(myinportb(0x0b));
   trans_com('\n');

   myoutportb(0x00,0xe1);   delay();
   trans_hex(myinportb(0x00));
   trans_hex(myinportb(0x01));
   trans_hex(myinportb(0x02));
   trans_hex(myinportb(0x03));
   myoutportb(0x01,0x70);   delay();
   trans_hex(myinportb(0x00));
   
   trans_com('\n');
   myoutportb(0x00,0x61);   delay();
   trans_hex(myinportb(0x01));
   trans_hex(myinportb(0x02));
   trans_hex(myinportb(0x03));
   trans_hex(myinportb(0x04));
   trans_hex(myinportb(0x05));
   trans_hex(myinportb(0x06));
   trans_hex(myinportb(0x07));
   trans_hex(myinportb(0x08));
   trans_hex(myinportb(0x09));
   trans_hex(myinportb(0x0a));
   trans_hex(myinportb(0x0b));
   trans_hex(myinportb(0x0c));
   trans_hex(myinportb(0x0d));

   trans_com('\n');
   trans_hex(myinportb(0x00));

   trans_com('\n');
*/

   while(1);
}

/**************************************************************/
void init_serial(void)
{
   TMOD=0x22;
   TH1 =0xf4;    //22.1184:f4:9600,fa:19200,fd:38400
   SCON=0x50;
   PCON=0x80;
   TR1=1;
   TI=0;
   RI=0;
   ////////////////// 

   TH0=256-OV_VAL;
   TL0=256-OV_VAL;
   ET0=1;
   TR0=1;

   //////////////////
   EA=0;
}

/**************************************************************/
void trans_com(uchar byte)
{
   SBUF=byte;
   while(!TI);
   TI=0;
}
/**************************************************************/
uchar rec_com(void)
{
   uchar ch;
   while(!RI);
   ch=SBUF;
   RI=0;
   return ch;
}

/**************************************************************/
uchar* rec_str(uchar *str)
{
   uchar idx;
   for(idx=0;idx<12;idx++)
   {
      str[idx]=rec_com();
      if(str[idx]==0 || str[idx]==0x0a || str[idx]==0x0d || str[idx]=='.')
      {
         break;
      }
   }

   str[idx]=0;

   return str;
}
/**************************************************************/

void timer0_isr(void) interrupt 1
{
   EA=0;
   ticks++;   
   EA=1;
}

/**************************************************************/

uint map_io(uchar io)
{
   uint io_addr[]={
      0x8000,0x8400,0x9000,0x9400,
      0xc000,0xc400,0xd000,0xd400,
      0x8800,0x8c00,0x9800,0x9c00,
      0xc800,0xcc00,0xd800,0xdc00,
      0xa000,0xa400,0xb000,0xb400,
      0xe000,0xe400,0xf000,0xf400,
      0xa800,0xac00,0xb800,0xbc00,
      0xe800,0xec00,0xf800,0xfc00,
      0 };

      if(io>0x1f)
         return 0xffff;
      return io_addr[io];

   //AEN SA19 ... SA10 SA9 SA8 SA7 SA6 SA5 SA4 SA3 SA2 SA1 SA0    ;RTL8019AS
   //                   1   1   0   0   0   x   x   x   x   x     ;0x03XX

   // 0   0   ...  0   A15 A15  0   0   0  A13 A11 A14 A12 A10    ;AT89C51
   //                   1   1   0   0   0   x   x   x   x   x     ;0xXX00

   //SA4 SA3 SA2 SA1 SA0
   //A13 A11 A14 A12 A10   Offset    A15 A14 A13 A12 | A11 A10  A9  A8 | A7...A0  AT89C51-Address
   // 0   0   0   0   0    0x00       1   0   0   0  |  0   0   0   0  | 0        0x8000
   // 0   0   0   0   1    0x01       1   0   0   0  |  0   1   0   0  | 0        0x8400
   // 0   0   0   1   0    0x02       1   0   0   1  |  0   0   0   0  | 0        0x9000
   // ..................................................................................
}
/**************************************************************/
void trans_hex(uchar ch)
{
   uchar tmp[8];
   sprintf(tmp,"%02x ",(uint)ch);
   trans_str(tmp);
}

/**************************************************************/
uchar dma_read_nodeid(uchar *ptr)
{
   uchar idx;

   SET_PAGE(0);

   myoutportb(0x09,0x00); //RSAR1 DMA read high address
   myoutportb(0x08,0x00); //RSAR0 DMA read low address
   myoutportb(0x0b,0x00); //RBCR1 read count high address
   myoutportb(0x0a,0x0c); //RBCR0 read count low address
   myoutportb(0x00,0x0a); //DMA read and start

   for(idx=0;idx<6;idx++)
   {
      ptr[idx]=myinportb(0x10);
      myinportb(0x10);
   }
   
   return TRUE;
}

/**************************************************************/
uchar set_nodeid(uchar *ptr)
{
   uchar idx;
   SET_PAGE(1);

   for(idx=0;idx<6;idx++)
   {
      myoutportb(PAR0+idx,ptr[idx]);
   }

   return TRUE;
}
/**************************************************************/

⌨️ 快捷键说明

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