📄 fm24c256.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 + -