当前位置:技术文章首页 >> 单片机源码 >> AT45D081/AT45DB021/AT45DB0xx驱动程序(C语言)

AT45D081/AT45DB021/AT45DB0xx驱动程序(C语言)

2007-11-25 16:10:35  作者:不详  来源:互联网  浏览次数:377  文字大小:【】【】【

/*---------------------------------------------------------
版 本: 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);
}
//注:该程序适用程度可靠,注意使用的方法和硬件连接方式

责任编辑:


相关文章
 

最新文章

更多

· 最新10位数字温度传感器...
· AT45D081/AT45DB021/AT4...
· X24C44一款老的EEPROM,(...
· 93C46/93c06/93c46/93c5...
· 128x64液晶KS0108控制器...
· 本站液晶程序里使用的ab...
· DS1302驱动程序(C51)
· 学习GCC Complete Refer...
· 农历转换函数(C语言版)
· 基于WinAVR的DS18B20源程序

推荐文章

更多

· 最新10位数字温度传感器...
· AT45D081/AT45DB021/AT4...
· X24C44一款老的EEPROM,(...
· 93C46/93c06/93c46/93c5...
· 128x64液晶KS0108控制器...
· 本站液晶程序里使用的ab...
· DS1302驱动程序(C51)
· 学习GCC Complete Refer...
· 农历转换函数(C语言版)
· 基于WinAVR的DS18B20源程序

热点文章

更多

01-01·[接口与通讯] 红外遥控系统原理及单片机软... (3804)
01-01·[单片机技术] 温度传感器PT100的应用 (2424)
09-17·[可编程逻辑] 基于VHDL语言的智能密码锁设计 (1984)
09-08·[可编程逻辑] 基于FPGA的QPSK调制解调电路... (1973)
09-08·[单片机技术] AT89S52的中文简介及资料下载 (1909)
11-24·[电子基础] 与初学者谈电子制作(电子入门) (1789)
09-09·[电源技术] 基于DSP的三相SPWM波发生软件... (1789)
10-24·[传感与控制] MODBUS RTU通讯协议在S7-200... (1612)
12-01·[单片机技术] 基于ARM智能家居控制器设计与... (1612)
11-24·[单片机技术] 常用LED数码管驱动电路2(单 ... (1601)
09-08·[电源技术] 能延长电池寿命的单节电池升... (1537)
09-11·[仪器与仪表] 应用ADuC847芯片设计压力及温... (1520)