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

📄 fm24c256.c

📁 一个单片机读写fm24c256的c51源程序
💻 C
字号:
/*---------------------------------------------
读写24C16标准程序段
完成日期:06/7/17
作者:lizao
-------------------------------------------*/
 #include<reg52.h>
#include<intrins.h>
unsigned char  redata;
sbit run=P1^1;
sbit SDA=P1^7;
sbit SCL=P1^6;


/*-----------------------------------------------
调用方式:void start_bit(void)
函数说明:开始位
-----------------------------------------------*/
void start_bit(void)
{
	SCL=1;
	_nop_();
	SDA=1;
	_nop_();
	SDA=0;
	_nop_();
	SCL=0;
	_nop_();
}


/*-----------------------------------------------
调用方式:void stop_bit(void)
函数说明:停止位
-----------------------------------------------*/
void stop_bit(void)
{
	SDA=0;
	_nop_();
	SCL=1;
	_nop_();
	SDA=1;
	_nop_();
}


/*-----------------------------------------------
调用方式:void delay200(void)
函数说明:延迟200ms
-----------------------------------------------*/
void delay200(void)
 {
 unsigned char i,k;
 for(i=400;i>0;i--)
 for(k=248;k>0;k--);  //延时200ms
 }


/*-----------------------------------------------
调用方式:void ack(void)
函数说明:应答函数
-----------------------------------------------*/
void ack(void)
{
	SDA=1;
	SCL=0;
	_nop_();
	SCL=1;
	_nop_();
//	while(SDA){;}   //This may make the CPU crash. 
	SCL=0;
	_nop_();
}


/*-----------------------------------------------
调用方式:void no_ack(void)
函数说明:无需应答位,在读程序中用到
-----------------------------------------------*/
void no_ack(void)
{
	SDA=1;
	_nop_();
	SCL=1;
	_nop_();
	//while(SDA){;}  //This may make the CPU crash.
       	SCL=0;
	_nop_();
}


/*-----------------------------------------------
调用方式:void write_8bit(uchar ch)
函数说明:写一个字节(8位)数据
-----------------------------------------------*/
void write_8bit(unsigned char ch)
{
	unsigned char i=8;

	SCL=0;
	_nop_();
	while(i--)
	{
		SDA=(bit)(ch&0x80);
		_nop_();
		ch<<=1;
		SCL=1;
		_nop_();
		SCL=0;
		_nop_();
	}
}


/*----------------------------------------------
调用方式:uchar read24c16(uint address)
函数说明:读24c16指定地址数据(字节读)
-----------------------------------------------*/
unsigned char ReadFm24c256(unsigned int address)
{
	unsigned char data rdata;
	unsigned char i=8;
	//EA=0;//避免与串口通讯等中断冲突
	start_bit();
	write_8bit(0xA0);
	ack();
	write_8bit(address/256);
	ack();//伪写
	write_8bit(address%256);
	ack();
	start_bit();
	write_8bit(0xA1);
	ack();
	while(i--)
	{
		rdata<<=1;
		SCL=0;
		_nop_();
		SCL=1;
		if(SDA) rdata=0x01;
	}
	no_ack();
	stop_bit();
	//EA=1;
	return rdata;
}


/*-----------------------------------------------
调用方式:void write24c256( address,ddata)
函数说明:写数据到24c256的指定地址(字节写)
-----------------------------------------------*/
void WriteFm24c256(unsigned int address,unsigned char ddata)
{
	//EA=0;  //避免与串口通讯等中断冲突
	start_bit();
	write_8bit(0xA0);
	ack();
	write_8bit(address/256);
	ack();
	write_8bit(address%256);
	ack();
	write_8bit(ddata);
	ack();
	stop_bit();
	//EA=1;
}
 void main ()
 {
  
  run=0;
  WriteFm24c256(0x1000,0x55);
   delay200();
   delay200();
   delay200();
   redata=ReadFm24c256(0x1000) ;
   delay200();
   while(1);
}

⌨️ 快捷键说明

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