新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > AT45DB021B在电力参数监测中的应用

AT45DB021B在电力参数监测中的应用

作者:时间:2013-08-06来源:网络收藏

#include Msp430x14x.h>
#define SCK_1 P4OUT = BIT7 //SCK=1
#define SCK_0 P4OUT =~ BIT7 //SCK=0
#define SI_1 P5OUT = BIT0 //CPU向AT写1
#define SI_0 P5OUT =~ BIT0 //CPU向AT写0
#define SO_IN ((P5IN 0x02) == 0x02) //CPU读.
#define DIR_IN P5DIR =~ BIT1; P5OUT = BIT1 //I/O输入,接受AT的数据
#define DIR_OUT P5DIR = BIT1; P5OUT = BIT1 //I/O输出
#define STARTOP P4OUT = BIT6; _NOP(); P4OUT =~ BIT6
#define ENDOP P4OUT =~ BIT6; _NOP(); P4OUT = BIT6
#define HIGHTOLOW {_NOP(); SCK_1; _NOP(); SCK_0; _NOP();}
int tempArray[150];
void Init(void) //引脚初始化;
{
P4DIR = BIT6;
P4OUT = BIT6;
P4DIR = BIT7;
P4OUT = BIT7;
P5DIR = BIT0;
P5OUT = BIT0;
P5DIR = BIT1;
P5OUT = BIT1;
}
写一字节子程序:
void Wr1byte(unsigned char tt)
{ unsigned char i;
for (i=0; i8; j++)
{
if ((tt 0x80) == 0x80)
SI_1;
else
SI_0;
HIGHTOLOW;
tt = tt 1;
}
}

读一字节子程序:

unsigned char Rd1byte(void)
{unsigned char i,medBit=0;
char Data=0;
for (i=0; i8; i++)
{ HIGHTOLOW;
_NOP();
if (SO_IN )
medBit = 1; //if(SO==1)medBit=1;
else
medBit = 0;
Data = (Data 1) medBit;
return Data;
}
}
对AT45DB021进行写操作子函数: (通过缓冲存储器2对主存储器写操作)
参数:pInData 指向要写入数据的指针
mm 写入数据数组的大小
startPage 将数据写入主存的起始页地址
startByte 将数据写入主存的起始页地址中的起始字节地址
void WriteMemory(const int *pInData, unsigned char mm, unsigned int startPage, unsigned int startByte)
{
unsigned char i, j;
unsigned char opCode;
char lowData;
char highData;
opCode = 0x85; //opCode=0x82 is also available.
lowData = highData = 0;
SCK_0;
_NOP();
STARTOP;
_NOP();
Wr1byte(opCode );
for (j=0; j5; j++)
HIGHTOLOW;
//send startPage address //发送起始页地址子程序;
//send startByte address //发送页内起始地址子程序;
for (j=0; jmm; j++) //对目的地址写操作,先写低字节后写高字节
{
lowData = (char)(*(pInData + j));
Wr1byte(lowData);
highData = (char)((*(pInData + j)) >> 8);
Wr1byte(highData);
}

ENDOP;
_NOP();
SI_1;
}
读出AT45DB021存储的数据(主存储器页读, 读出字)
参数:mm 读出数据数组的大小
startPage 读出数据的起始页地址
startByte 读出数据的起始页地址中的起始字节地址
返回值:无
void ReadMemory(unsigned char mm, unsigned int startPage, unsigned int startByte)
{
unsigned char i, j;
unsigned char opCode;
unsigned char medBit;
char lowData;
char highData;
opCode = 0x52;
lowData = highData = 0;
medBit = 0;
SCK_0;
_NOP();
STARTOP;
_NOP();
Wr1byte(opCode );
for (j=0; j5; j++)
HIGHTOLOW; //5位保留码;
//send startPage address //发送起始页地址子程序;
//send startByte address //发送页内起始地址子程序;
for (j=0; j32; j++)
HIGHTOLOW; //32位无关码;
DIR_IN;
for (j=0; jmm; j++)
{
lowData= Rd1byte();
highData= Rd1byte();
tempArray[j] = ((int)highData 8) + lowData;
}
ENDOP;
SI_1;
_NOP();
DIR_OUT;
}


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭