📄 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 + -