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

📄 my93c46.c

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

Author: Yu Liangyao, yly@mail.tsinghua.edu.cn

Date: 2002-9-22
Update: 2002-10-2

   (for test only)

Note: It is very easy to expand to 93c56/66, ect, 
      but not implemented here.

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

#include "my93c46.h"

/**************************************************************/
//MW-Transfer function
uint mw_trans(uint dat,uchar bits)
{
   uint res=0,idx;
   uint tmp;
   
   tmp=dat;

   for(idx=0;idx<bits;idx++)
   {
      res<<=1;
      SK_0;
	  SET_DI((tmp>>15)&0x01);  _mynop_();
	  tmp<<=1;
	  SK_1;                    _mynop_();
	  res|=GET_DO(0);
	  SK_0;                    _mynop_();
	       
   }
   SET_DI(0);

   return res;
}

/**************************************************************/
//Erase a byte function
uchar mw_erase(uchar address)
{
   mw_ewen();

   CS_1;
   mw_trans(MW_ERASE|(((uint)(address & ADDR_MSK))<<(16-3-ADDR_LEN)),CMD_LEN);
   CS_0;       
   _mynop_();
   CS_1;
   while(GET_DO(0)==0);
   CS_0;

   mw_ewds();

   return TRUE;
}

/**************************************************************/
//Erase all function
uchar mw_eral(void)
{
   mw_ewen();

   CS_1;
   mw_trans(MW_ERAL,CMD_LEN);
   CS_0;       
   _mynop_();
   CS_1;
   while(GET_DO(0)==0);
   CS_0;

   mw_ewds();

   return TRUE;
}

/**************************************************************/
//Erase/Write disable
uchar mw_ewds(void)
{
   CS_1;
   mw_trans(MW_EWDS,CMD_LEN);
   CS_0;
   return TRUE;
}

/**************************************************************/
//Erase/Write enable
uchar mw_ewen(void)
{
   CS_1;

   mw_trans(MW_EWEN,CMD_LEN);

   CS_0;
   return TRUE;
}

/**************************************************************/
//Test function
uchar mw_test(void)
{
   uint res;
   CS_1;

   res=mw_trans(MW_READ,CMD_LEN);
   mw_trans(DUMMY_WORD,DATA_LEN);

   CS_0;

   return ((res&0x01)==0)?TRUE:FALSE;
}
/**************************************************************/
//Read function
uint mw_read(uchar address)
{
   uint res; 
   CS_1;
   mw_trans(MW_READ|(((uint)(address & ADDR_MSK))<<(16-3-ADDR_LEN)),CMD_LEN);
   res=mw_trans(DUMMY_WORD,DATA_LEN);
   CS_0;

   return res;
}

/**************************************************************/
//Write funcion
uchar mw_write(uchar address,uint dat)
{
   mw_ewen();

   CS_1;

   mw_trans(MW_WRITE|(((uint)(address & ADDR_MSK))<<(16-3-ADDR_LEN)),CMD_LEN);
   mw_trans(((uint)dat)<<(16-DATA_LEN),DATA_LEN);

   CS_0;       
   _mynop_();
   CS_1;
   while(GET_DO(0)==0);
   CS_0;

   mw_ewds();

   return TRUE;
}

/**************************************************************/
//Write all function
uchar mw_wral(uint dat)
{
   mw_ewen();

   CS_1;

   mw_trans(MW_WRAL,CMD_LEN);
   mw_trans(((uint)dat)<<(16-DATA_LEN),DATA_LEN);

   CS_0;       
   _mynop_();
   CS_1;
   while(GET_DO(0)==0);
   CS_0;

   mw_ewds();

   return TRUE;
}

/**************************************************************/
uchar mw_init(void)
{
   CS_0;
   SK_0;
   DI_0;

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

⌨️ 快捷键说明

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