51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
AT45D081/AT45DB021/AT45DB0xx驱动程序(C语言)
发布时间:2009/6/2  阅读次数:572  字体大小: 【】 【】【

作者:梁衍龙    来源:互联网

/*---------------------------------------------------------
版 本: V2.2
作 者:梁衍龙
创作时间:2002年9月
==========================================================*/
#include "reg51.h"
#include "intrins.h"
#define NOP() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }

sbit SPI45D081_CS =P1^5;//片选接口
sbit SPI45D081_SK =P1^6;//时钟接口
sbit SPI45D081_DI =P1^7;//数据输入接口
sbit SPI45D081_DO =P1^4;//数据输出接口

delay(unsigned int t)
{
while(t--);
}

// SPI_SK上升沿数据有效 _/-
SPI45D081_WriteBits(unsigned char byte,unsigned char num_of_bits)
{
unsigned char count;
byte=byte<<(8-num_of_bits);
for(count=0;count<num_of_bits;count++)
{ SPI45D081_SK=0;
byte<<=1;
NOP();
SPI45D081_DI=CY;
NOP();
SPI45D081_SK=1;
NOP();
}
}
// SPI_SK下降沿数据有效 -\_
unsigned char SPI45D081_ReadByte()
{
unsigned char count,byte;
for(count=0;count<8;count++)
{ SPI45D081_SK=1;
NOP();
byte<<=1;
SPI45D081_SK=0;
NOP();
if(SPI45D081_DO) byte++;
NOP();
}
return(byte);
}
//Main Memory Page to Buffer 1 Transfer
void PageToBuffer1(unsigned int page)
{
SPI45D081_SK=1; //?? start
NOP();
SPI45D081_CS=0; //start
NOP();
//send 8 bit opcode, Main Memory Page to Buffer 1 Transfer: 0x53
SPI45D081_WriteBits(0x53,8);// fill 3 sk,don't care.
SPI45D081_WriteBits(0x00,3);//send 12 bit address to 45D081
SPI45D081_WriteBits( (unsigned char)(page>>8) , 4 );
SPI45D081_WriteBits( (unsigned char)(page) , 8 );
// fill 9 sk,don't care.
SPI45D081_WriteBits( 0x00 , 4 );
SPI45D081_WriteBits( 0x00 , 5 );//total 32 bit
SPI45D081_CS=1; // end
delay(200);}//
unsigned char ReadDataFromBuffer1(unsigned int address)
{
unsigned char dat;
SPI45D081_SK=1; //?? start
NOP();
SPI45D081_CS=0; //start
NOP();
//send 8 bit opcode:0x54
SPI45D081_WriteBits(0x54,8);// fill 15 sk,don't care.
SPI45D081_WriteBits(0x00,8);
SPI45D081_WriteBits(0x00,7);//send 9 bit address to 45D081 buffer1
SPI45D081_WriteBits( (unsigned char)(address>>8) , 1 );
SPI45D081_WriteBits( (unsigned char)(address) , 8 );//fill 8 bits blank
SPI45D081_WriteBits( 0x00 , 8 );// receive data
dat=SPI45D081_ReadByte() ;
SPI45D081_CS=1; // end
return(dat);
}

上一篇:没有了! 下一篇:X24C44一款老的EEPROM(C语言)
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号