⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x25045.c

📁 自己写的一个24C45的C程序
💻 C
字号:
/*****************************************/
/*****Copyright (c) 2007  绍兴文理学院****/
/*********All rights reserved*************/
/***********作    者:胡 守 方************/
/*****************************************/
#include<reg52.h>

#define	WRDS 0x80			//复位写允许锁存器
#define	STO 0x81		//把RAM数据存入EEP
#define	ENAS 0x82		//允许AUTOSTORE(自动存储)特性
#define	WRITE 0x83		//把数据定稿地址AAAA
#define	WREN 0x84		//设置写允许锁存器
#define	RCL 0x85		//把EEP数据调入RAM
#define	READ 0x86		//从RAM地址AAAA读出数据

sbit ep_ce=P0^0;	 //片选
sbit ep_sck=P0^1;  //时钟
sbit ep_si=P0^2;   //数据输入
sbit ep_so=P0^3;   //数据输出

//往24C45写入一个字节,高位在前,低位在后
void in_byte(unsigned char in_put)
{
	unsigned char data i;//循环变量
	ep_sck=0;
	for(i=0;i<8;i++)  //写入8个位
	{
		ep_si=in_put&0x80;	
		ep_sck=1;	
		ep_sck=0;	
		in_put=in_put<<1;		
	}
	ep_si=1;
}

//读24C45的RAM一字节数据
unsigned int read_24c45(unsigned char read_add)
{
	unsigned char read_temp,i,y,read_h,read_l; //
	unsigned int re_data; //返回值
	ep_ce=1;
	read_temp=read_add ;
	read_temp<<=3;
	read_temp|=READ;    
	in_byte(read_temp);
	ep_si=1;
	
	for(i=0;i<8;i++)//读前八位
	{		
		read_h=read_h<<1;	
		y=ep_so;		
		read_h=read_h|y;	
		ep_sck=1;
		ep_sck=0;
	}
	for(i=0;i<8;i++)//读后八位
	{
		read_l=read_l<<1;		
		y=ep_so;		
		read_l=read_l|y;		
		ep_sck=1;
		ep_sck=0;
	}
	ep_ce=0;
	re_data=read_h;
	re_data<<=8;
	re_data|=read_l;
	return(re_data)  ;
}
//往24C45的一个RAM地址中写入一个字节数据,
//注意本程序和DATASHEET的写入时序相反,是从高位写,而读也是从高位开始,
//所以两者一起正好抵消错误~~~
void write_24c45(unsigned char write_add,unsigned int write_dat)
{
	unsigned char write_add_temp,write_dat_h,write_dat_l;
	write_dat_l=write_dat;    //低八位
	write_dat_h=write_dat>>8;     //高八位
	ep_ce=1;
	write_add_temp=write_add;
	write_add_temp<<=3;
	write_add_temp|=WRITE;
	in_byte(write_add_temp);
	in_byte(write_dat_h);
	in_byte(write_dat_l);
	ep_ce=0;
}

//出初化24C45
void init_24c45()
{
	ep_ce=1;//把ROM调入RAM
	in_byte(RCL);
	ep_ce=0;
	ep_ce=1;//开写允许
	in_byte(WREN);
	ep_ce=0;
	ep_ce=1;//允许AUTOSTORE(自动存储)
	in_byte(ENAS);
	ep_ce=0;
}


void main()
{
	unsigned int a0;   //测试用
	init_24c45();
	write_24c45(2,456);//写24C45的
	/*ep_ce=1;  //把456从RAM存入ROM
	in_byte(STO);
	ep_ce=0;*/
	/*ep_ce=1;		//把456从ROM调入RAM
	in_byte(RCL);
	ep_ce=0; */
	a0=read_24c45(2);
	
	while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -