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

📄 card9346.c

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

/**************************************************************/
// from www.laogu.com
/**************************************************************/


#include "card9346.h"
#include "ylystd.h"
#include "hostmcu.h"
#include "8019.h"

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

uint read_93c46(uchar address)
{
   //93c46 command register:
   //  7    6    5   4   3    2    1     0
   //  eem1 eem0 nc  nc  eecs eesk eedi  eedo

   uchar count;
   uint retval;
   
   address|=0x80;
   myoutportb(0x00,0xe2); //select page 3 register
                          //first bit is 1
   myoutportb(0x01,0x8a); //cs=1 sk=0 di=1
   myoutportb(0x01,0x8e); //cs=1 sk=1 di=1
   do_93c46(address);
   
   for(count=0;count<16;count++)
   {
      //out 0
      myoutportb(0x01,0x88); //cs=1 sk=0 di=0
      myoutportb(0x01,0x8c); //cs=1 sk=1 di=0
      retval<<=1;
      if(myinportb(0x01)&0x01!=0)
      {
         retval|=0x01;
      }
   }
   myoutportb(0x01,0x88); //cs=1 sk=0 di=0
   myoutportb(0x01,0x00); //cs=0 sk=0 di=0
   
   return retval;
}

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

void write_93c46(uchar address,uint value)
{
   uchar tmp;

   myoutportb(0x00,0xe2);  //select page 3 register

   myoutportb(0x01,0x8a);  //out start bit: 1
   myoutportb(0x01,0x8e);

   do_93c46(0x3c);         //Write/Erase enable
   myoutportb(0x01,0x88);
   myoutportb(0x01,0x00);

   myoutportb(0x01,0x8a);  //out start bit: 1
   myoutportb(0x01,0x8e);

   tmp=address|0x40;       //actrual write
   do_93c46(tmp);
   do_93c46(value>>8);
   do_93c46(value&0xff);
   myoutportb(0x01,0x88);
   myoutportb(0x01,0x00);

   myoutportb(0x01,0x88);  //wait for write finish
   for(tmp=0;tmp<10000;tmp++)
   {
      if((myinportb(0x01)&0x01)!=0)
	     break;
   }
   myoutportb(0x01,0x00);

   myoutportb(0x01,0x8a);  //Write/Erase disable
   myoutportb(0x01,0x8e);
   do_93c46(0x00);
   myoutportb(0x01,0x88);
   myoutportb(0x01,0x00);

}
/**************************************************************/
void do_93c46(uchar val)
{
    uchar count;
    uchar tmpval;
    
    tmpval=val;
    
    for(count=0;count<8;count++)
    {
        if((tmpval&0x80)!=0)
        {
            //out 1
            myoutportb(0x01,0x8a);
            myoutportb(0x01,0x8e);
        }
        else
        {
            //out 0
            myoutportb(0x01,0x88);
            myoutportb(0x01,0x8c);
        }
        tmpval<<=1;
    }
}

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

⌨️ 快捷键说明

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