高级回复 X5045读写一体化C51程序包HotPower的文潭.docx
《高级回复 X5045读写一体化C51程序包HotPower的文潭.docx》由会员分享,可在线阅读,更多相关《高级回复 X5045读写一体化C51程序包HotPower的文潭.docx(7页珍藏版)》请在冰豆网上搜索。
![高级回复 X5045读写一体化C51程序包HotPower的文潭.docx](https://file1.bdocx.com/fileroot1/2023-1/6/bc4dc85c-8f20-41cb-bf63-86f876c8491d/bc4dc85c-8f20-41cb-bf63-86f876c8491d1.gif)
高级回复X5045读写一体化C51程序包HotPower的文潭
高级回复X5045读写一体化C51程序包--HotPower的文潭
X5045读写一体化C51程序包
发表于2006/12/301:
46:
50
X5045读写一体化C51程序包-(精)(11972字)hotpower2004-9-513:
37:
56[130次]voidX5045SpiOpen(void);//打开X5045片选
voidX5045SpiClose(void);//关闭X5045片选
voidX5045WriteEnable(void);//软件使能X5045写操作
voidX5045WriteDisable(void);//软件禁止X5045写操作
unsignedcharX5045SpiSend(unsignedcharval);//X5045收发SPI协议
voidX5045WriteByte(unsignedintaddr,unsignedcharval);//写X5045一个字节
voidX5045WriteWord(unsignedintaddr,unsignedintval);//写X5045一个字
unsignedcharX5045ReadByte(unsignedintaddr);//读X5045一个字节
unsignedintX5045ReadWord(unsignedintaddr);//读X5045一个字
unsignedcharX5045ReadStatus(void);//读X5045状态
voidX5045WriteStatus(unsignedcharval);//写X5045状态
voidX5045WriteWait(void);//等待X5045写入完成/*--------------------------------------
打开X5045片选
--------------------------------------*/
voidX5045SpiOpen(void)
{
EEPROMCS=1;//WDT
EEPROMSCK=0;
EEPROMSIO=1;//SO=SI=1,释放总线
EEPROMCS=0;//WDT;打开X5045片选CS
}
/*--------------------------------------
关闭X5045片选
--------------------------------------*/
voidX5045SpiClose(void)
{
EEPROMCS=1;//关闭X5045片选CS
EEPROMSIO=1;//SO=SI=1,释放总线
EEPROMSCK=0;
}/*--------------------------------------
软件使能X5045写操作
--------------------------------------*/voidX5045WriteEnable(void)
{
X5045SpiOpen();//打开X5045片选
EEPROMWP=1;//硬件使能X5045写操作
X5045SpiSend(WREN);//发送使能X5045写命令
X5045SpiClose();//关闭X5045片选
}/*--------------------------------------
软件禁止X5045写操作
--------------------------------------*/
voidX5045WriteDisable(void)
{
X5045SpiOpen();//打开X5045片选
X5045SpiSend(WRDI);//发送禁止X5045写命令
EEPROMWP=0;//硬件禁止X5045写操作
X5045SpiClose();//关闭X5045片选
}/*--------------------------------------
X5045收发SPI协议
--------------------------------------*/
unsignedcharX5045SpiSend(unsignedcharval)
{
unsignedchari;
WDTRST=0x1e;//89s52内狗
WDTRST=0xe1;//89s52内狗
ACC=val;
for(i=8;i>0;i--)
{
CY=EEPROMSO;//取数据SO
_rlca_();//存数据ACC.0读数据ACC.7同时进行
EEPROMSI=CY;//送数据SI
EEPROMSCK=1;//上升沿打入数据
_nop_();
EEPROMSCK=0;//下降沿读入数据(首次为假动作)
}
returnACC;
}/*--------------------------------------
写X5045一个字节
--------------------------------------*/
voidX5045WriteByte(unsignedintaddr,unsignedcharval)
{
unsignedchartemp;
temp=WRITE;
if((addr>>8)&0x01)temp|=8;
X5045WriteEnable();//使能X5045写操作
X5045SpiOpen();//打开X5045片选
X5045SpiSend(temp);//发送X5045写命令及高位地址
X5045SpiSend(addr&0xff);//发送X5045写低位地址
X5045SpiSend(val);//发送X5045写数据
X5045SpiClose();//关闭X5045片选
X5045WriteWait();//等待本次X5045写入完成
X5045WriteDisable();//禁止X5045写操作
}/*--------------------------------------
写X5045一个字
--------------------------------------*/
voidX5045WriteWord(unsignedintaddr,unsignedintval)
{
unsignedchartemp;
temp=WRITE;
if((addr>>8)&0x01)temp|=8;
X5045WriteEnable();//使能X5045写操作
X5045SpiOpen();//打开X5045片选
X5045SpiSend(temp);//发送X5045写命令及高位地址
X5045SpiSend(addr&0xff);//发送X5045写低位地址
X5045SpiSend(val&0xff);//发送X5045写低位数据
X5045SpiSend(val>>8);//发送X5045写高位数据
X5045SpiClose();//关闭X5045片选
X5045WriteWait();//等待本次X5045写入完成
X5045WriteDisable();//禁止X5045写操作
}/*--------------------------------------
读X5045一个字节
--------------------------------------*/
unsignedcharX5045ReadByte(unsignedintaddr)
{
unsignedcharval;
X5045SpiOpen();//打开X5045片选
val=READ;
if((addr>>8)&0x01)val|=8;
X5045SpiSend(val);//发送X5045读命令及高位地址
X5045SpiSend(addr&0xff);//发送X5045读低位地址
val=X5045SpiSend(0xff);//接收X5045读数据
X5045SpiClose();//关闭X5045片选
returnval;
}/*--------------------------------------
读X5045一个字
--------------------------------------*/
unsignedintX5045ReadWord(unsignedintaddr)
{
unsignedcharval;
X5045SpiOpen();//打开X5045片选
val=READ;
if((addr>>8)&0x01)val|=8;
X5045SpiSend(val);//发送X5045读命令及高位地址
X5045SpiSend(addr&0xff);//发送X5045读低位地址
val=X5045SpiSend(0xff);//接收X5045读低位数据
addr=X5045SpiSend(0xff);//接收X5045读高位数据
X5045SpiClose();//关闭X5045片选
addr<<=8;
addr|=val;
returnaddr;
}
/*--------------------------------------
读X5045状态
--------------------------------------*/
unsignedcharX5045ReadStatus(void)
{
unsignedcharval;
X5045SpiOpen();//打开X5045片选
X5045SpiSend(RDSR);//发送读X5045状态命令
val=X5045SpiSend(0xff);//接收X5045状态数据
X5045SpiClose();//关闭X5045片选
returnval;
}
/*--------------------------------------
写X5045状态
--------------------------------------*/
voidX5045WriteStatus(unsignedcharval)
{
X5045SpiOpen();//打开X5045片选
X5045SpiSend(WRSR);//发送写X5045状态命令
X5045SpiSend(val);//发送X5045状态数据
X5045SpiClose();//关闭X5045片选
}/*--------------------------------------
等待X5045写入完成
--------------------------------------*/
voidX5045WriteWait(void)
{
while(X5045ReadStatus()&WIP);//WIP=0退出
}系统注:
本文被午夜听风加精.
X5045SpiSend()的一个变例(平时EEPROMSCK=1)(868字)hotpower[18次]2004-9-519:
01:
01
unsignedcharX5045SpiSend(unsignedcharval)
{
unsignedchari;
ACC=val;
for(i=8;i>0;i--)
{
EEPROMSCK=0;//下降沿读入数据
_nop_();//延时
CY=EEPROMSO;//取数据SO
_rlca_();//存数据ACC.0读数据ACC.7同时进行
EEPROMSI=CY;//送数据SI
_nop_();//延时
EEPROMSCK=1;//上升沿打入数据
_nop_();//延时
EEPROMSI=1;//释放总线SI
}
returnACC;
}系统分类:
单片机
用户分类:
KeilC51
标签:
无标签
发表评论阅读全文(2673)|回复(0)