📄 93lc46b.c
字号:
/*=========================================================================================*/
/*张刚--最后修改于****年**月**日*/
/*-----MicroWire(微总线)串行EEROM93LC46B(64*16)程序,本程序主要实现以下功能-----*/
/*1、实现93LC46B读数据;*/
/*2、实现93LC46B写数据;*/
/*=========================================================================================*/
#include <Constdef.h>
//---写义数据长度,93LC46B的长度为一个字---//
#define DatLen 16
//---定义各引脚---//
sbit CLK=P1^0; //---时钟引脚---//
sbit DI=P1^1; //---数据输入引脚---//
sbit DO=P1^2; //---数据输出引脚---//
//---CS置为低电平---//
void LowCS()
{
P2&=0xc7;
return;
}
//---CS置为高---//
void HighCS()
{
LowCS();
P2|=0x28;
return;
}
//---写入1位数据---//
void WriteBit(bit bData)
{
CLK=0;
DI=bData;
CLK=1;
return;
}
//---写入操作码---//
void WriteOp(uchar cData)
{
WriteBit((bit)(cData&0x02));
WriteBit((bit)(cData&0x01));
CLK=0;
return;
}
//---写入地址---//
void WriteAddress(uchar cData)
{
uchar cTmp;
cData<<=2;
for (cTmp=0;cTmp<6;cTmp++)
{
WriteBit((bit)(cData&0x80));
cData<<=1;
}
CLK=0;
return;
}
//---写入数据---//
void WriteData(unsigned int iData)
{
uchar cTmp;
for (cTmp=0;cTmp<16;cTmp++)
{
WriteBit((bit)(iData&0x8000));
iData<<=1;
}
CLK=0;
return;
}
//---读出一位数据---//
bit ReadBit()
{
bit bTmp;
CLK=1;
bTmp=DO;
CLK=0;
return(bTmp);
}
//---读出数据---//
uint ReadData()
{
uint iTmp=0;
uchar cTmp;
for (cTmp=0;cTmp<16;cTmp++)
{
iTmp<<=1;
if (ReadBit())
{
iTmp++;
}
}
return (iTmp);
}
//---置写入使能---//
void EnWrite()
{
DI=0;
CLK=0;
HighCS();
WriteBit(1); //---写入启动位---//
WriteOp(0); //---写入操作码---//
WriteAddress(0x30); //---写入地址码---//
LowCS();
}
//---取消写入使能---//
void DisWrite()
{
DI=0;
CLK=0;
HighCS();
WriteBit(1); //---写入启动位---//
WriteOp(0); //---写入操作码---//
WriteAddress(0); //---写入地址码---//
LowCS();
}
//---写入一个字---//
void WriteWord(uchar cAddress,uint iData)
{
DI=0;
CLK=0;
HighCS();
WriteBit(1); //---写入启动位---//
WriteOp(1); //---写入操作码---//
WriteAddress(cAddress); //---写入地址码---//
WriteData(iData); //---写入数据---//
LowCS();
HighCS();
while(!DO); //---等待写入完成---//
return;
}
//---读出一个字---//
uint ReadWord(uchar cAddress)
{
uint iTmp;
DI=0;
CLK=0;
HighCS();
WriteBit(1); //---写入启动位---//
WriteOp(2); //---写入操作码---//
WriteAddress(cAddress); //---写入地址码---//
iTmp=ReadData(); //---写入数据---//
LowCS();
return(iTmp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -