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

📄 at2401.c

📁 AT2401的读写程序
💻 C
字号:
#include "AT89X51.h"
#include "type.h"

/**definethe  port***/
sbit	SCL=P0^4;
sbit	SDA=P0^3;
sbit	HAVE=P0^6;
sbit	DOG=P3^7;

/**define command*********/
#define	COMMAND_WRITE 0xa0
#define	COMMAND_READ  0xa1

/***************************************************************************/
static void  DelayMs(U16 u16Num) 
{
	U8 u8Tmp;
	for(;u16Num!=0;u16Num--,DOG=!DOG) 
	{
        for(u8Tmp=112;u8Tmp!=0;u8Tmp--) 
        {
        }
	}
}

/***************************************************************************/
static void Start() 
{
	SDA=1;
	SCL=1;
	SDA=0;
	SCL=0;
}

/***************************************************************************/
static void Stop() 
{
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}

/***************************************************************************/
static void Ack() 
{
	SDA=0;
	SCL=1;
	SCL=0;
	SDA=1;
}

/***************************************************************************/
static void NoAck() 
{
	SDA=1;
	SCL=1;
	SCL=0;
}

/***************************************************************************/
static BIT TestAck() 
{
	BIT ErrorBit;
	SDA=1;
	SCL=1;
	ErrorBit=SDA;
	SCL=0;
	return(ErrorBit);
}

/***************************************************************************/
static BIT WriteByte(U8 u8Input) 
{
	U8 u8Tmp;
	for(u8Tmp=8;u8Tmp!=0;u8Tmp--) 
	{
		SDA=(BIT)(u8Input&0x80);
		SCL=1;
		SCL=0;
		u8Input=u8Input<<1;
	}
	return 0;
}

/***************************************************************************/
static U8 ReadByte() 
{
	U8 u8Tmp,u8Ret=0;
	for(u8Tmp=8;u8Tmp!=0;u8Tmp--) 
	{
		SCL=1;
		u8Ret=u8Ret<<1;
		u8Ret=u8Ret|((U8)(SDA));
		SCL=0;
	}
	return(u8Ret);
}

/***************************************************************************/
void CARD_WriteBlock(U8 *pu8Data,U8 u8Addr,U8 u8Num) 
{
	Start();
	WriteByte(COMMAND_WRITE);
	TestAck();
	WriteByte(u8Addr);
	TestAck();
	for(;u8Num!=0;u8Num--) 
	{
		WriteByte(*pu8Data);
		TestAck();
		pu8Data++;
	}
	Stop();
	DelayMs(10);
}

/***************************************************************************/
void CARD_ReadBlock(U8 *pu8Data,U8 u8Addr,U8 u8Num) 
{	
	Start();
	WriteByte(COMMAND_WRITE);
	TestAck();
	WriteByte(u8Addr);
	TestAck();
	Start();
	WriteByte(COMMAND_READ);
	TestAck();
	while(u8Num!=1) 
	{
	    *pu8Data=ReadByte();
	    Ack();
	    u8Addr++;
	    u8Num--;
	}
	*pu8Data=ReadByte();
	NoAck();
	Stop();
}

/***************************************************************************/
U8 CARD_HaveCard() 
{
	if(HAVE == 1)
	{
	    return 1;
	}
	else
	{
	    return 0;
	}
}

⌨️ 快捷键说明

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