当前位置:技术文章首页 >> 单片机源码 >> X24C44一款老的EEPROM,(C语言)

X24C44一款老的EEPROM,(C语言)

2007-11-25 16:10:35  作者:不详  来源:互联网  浏览次数:448  文字大小:【】【】【
/* 版 本:V1.2
作 者:梁衍龙
创作时间:2002年8月
版 权:www.mcuzb.com
联系方式:slzsw_lyl_2@163.com
*/
#include "reg51.h"
#include "intrins.h"
#define X24C44_WRDS 0x80 //RESET WRITE ENABLE LATCH
#define X24C44_STO 0x81 //TRANSFERS FROM RAM TO EEPROM
#define X24C44_WRITE 0x83 //RAM WRITE
#define X24C44_WREN 0x84 //SET WRITE ENABLE LATCH
#define X24C44_RCL 0x85 //TRANSFERS FROM EEPROM TO RAM, RESETS WRITE ENABLE LATCH
#define X24C44_READ 0x86 //RAM READ</P><P>
//#define NOP() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
//对从芯片而言
sbit SPI24C44_CS =P1^1;
sbit SPI24C44_SK =P1^0;
sbit SPI24C44_DI =P1^2;
sbit SPI24C44_DO =P1^3;
lag(unsigned int Time){while(Time--);}
void delayms(){ unsigned char i=255; while(i--);}
//写一字节// SPI_SK上升沿数据有效 _/-
void SPI24C44_WriteByte(unsigned char dat)
{ unsigned char count;
for(count=0;count<8;count++)
{
dat<<=1;
SPI24C44_DI=CY; NOP();
SPI24C44_SK=1; ///上升
SPI24C44_SK=0; //开始上升 NOP();
}
}
//读一字// SPI_SK上升沿数据有效 _/—
unsigned int SPI24C44_ReadWord()
{ unsigned char count;
unsigned int dat=0;
for(count=0;count<16;count++)
{
dat<<=1;
if(SPI24C44_DO) dat++; //为"0"读出一个字
SPI24C44_SK=1;
SPI24C44_SK=0;
NOP();
} return(dat);
}
//从24C44(EEPROM)里面读取一字
//address: 0-15
unsigned int SPI24C44_Read(unsigned char address)
{
unsigned char temp;
unsigned int dat;
SPI24C44_SK=0;
NOP();
SPI24C44_CS=0;
NOP();
SPI24C44_DI=0;
NOP();
SPI24C44_DO=0;
NOP();
SPI24C44_CS=1;
SPI24C44_WriteByte(X24C44_RCL);
//PERFORM A RECALL TO SET THE RECALL LATCH
SPI24C44_CS=0;
SPI24C44_CS=1;
SPI24C44_WriteByte(X24C44_WREN);
//PERFORM A RECALL TO SET THE RECALL LATCH
SPI24C44_CS=0;
address=address<<3;
temp= X24C44_READ | address;
SPI24C44_CS=1;
SPI24C44_WriteByte(temp); //Read Data from RAM Address
dat=SPI24C44_ReadWord();
SPI24C44_CS=0;
return(dat);}//向24C44里(EEPROM)写一字
SPI24C44_Write(unsigned char address,unsigned int dat)
{ unsigned char temp;
unsigned int moon;
SPI24C44_SK=0;
NOP();
SPI24C44_CS=0;
NOP();
SPI24C44_DI=0;
NOP();
SPI24C44_DO=0;
NOP();
SPI24C44_CS=1;
SPI24C44_WriteByte(X24C44_RCL); //PERFORM A RECALL TO SET THE RECALL LATCH
SPI24C44_CS=0;
SPI24C44_CS=1;
SPI24C44_WriteByte(X24C44_WREN); //PERFORM A RECALL TO SET THE RECALL LATCH
SPI24C44_CS=0;
address=address<<3;
temp=X24C44_WRITE | address;
SPI24C44_CS=1;
SPI24C44_WriteByte(temp); //WRITE(1AAAA011): Write Data into RAM Address AAAA
SPI24C44_WriteByte( (unsigned char)(dat>>8) );
//send data
SPI24C44_WriteByte( (unsigned char)dat );
//send data
SPI24C44_CS=0;
SPI24C44_CS=1;
SPI24C44_WriteByte(X24C44_STO );
//STO(1XXXX001):Store RAM Data in E2PROM
SPI24C44_CS=0;
SPI24C44_CS=1;
SPI24C44_WriteByte(X24C44_WRDS );
//STO(1XXXX001):Store RAM Data in E2PROM
SPI24C44_CS=0;
lag(500);
moon=SPI24C44_Read(address>>3);
if(moon==dat) SystemError=0;
else SystemError=1;}//非标准SPI口驱动,比较难调注意芯片与CPU接口!!呵呵

责任编辑:


相关文章
 

最新文章

更多

· 最新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)