登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
铁电MB54RC16读写源代码
看1836
|
回0
|
收藏
楼主
ID:50487
只看他
2022-3-22 08:38
这款10亿次读写次数的芯片源代码,分享给大家,免得大家花时间去看手册
单片机源程序如下:
代码:
#include "MB85RC16.h"
#include "iic.h"
char MB85RC16_WR(unsigned int addr,unsigned char pbuf)
{
unsigned int i=0;
IIC_START();
//发送地址
if(IIC_SendByte(device_id|((unsigned char)(addr>>8)<<1))==1)
{
return 1;
}
if(IIC_SendByte((unsigned char)addr)==1)
{
return 1;
}
IIC_SendByte(pbuf);
IIC_STOP();
return 0;
}
unsigned char MB85RC16_RE(unsigned int addr)
{
unsigned int i=0;
unsigned char pbuf=0;
IIC_START();
//发送地址
if(IIC_SendByte(device_id|((unsigned char)(addr>>8)<<1))==1)
{
return 1;
}
if(IIC_SendByte((unsigned char)(addr&0x00ff))==1)
{
return 1;
}
IIC_START();
if(IIC_SendByte(device_id|device_r|((unsigned char)(addr>>8)<<1))==1)
{
return 1;
}
pbuf=IIC_RecByte();
IIC_NOACK();
IIC_STOP();
return pbuf;
}
代码:
#include "iic.h"
void IIC_START()
{
SCL_SET(1);
SDA_SET(1);
delayus(5);
SDA_SET(0);
delayus(5);
SCL_SET(0);
}
void IIC_STOP()
{
SCL_SET(1);
SDA_SET(0);
delayus(5);
SDA_SET(1);
delayus(5);
}
void IIC_ACK()
{
SDA_SET(0);
delayus(1);
SCL_SET(1);
delayus(4);
SCL_SET(0);
delayus(4);
}
void IIC_NOACK()
{
SDA_SET(1);
delayus(1);
SCL_SET(1);
delayus(1);
SCL_SET(0);
delayus(1);
}
char IIC_GETACK()
{
char ErrorBit;
SDA_SET(1);
delayus(1);
SCL_SET(1);
delayus(1);
if(SDA==1)ErrorBit=1;else ErrorBit=0;
SCL_SET(0);
delayus(1);
return ErrorBit;
}
//*********************************************************************
// 功能描述:主设备向从设备发送个一字节
// 返回值: 0->成功 1->失败
//*********************************************************************/
unsigned char IIC_SendByte(unsigned char Data)
{
unsigned char i; // 位数控制
for (i=0;i<8;i++) // 写入时是用时钟下降沿同步数据
{
if (Data & 0x80){SDA_SET(1);}else {SDA_SET(0); }
delayus(1); // 保持0.2uS以上(TSU.DAT)
SCL_SET(1);
delayus(4); // 保持4.0uS以上(THIGH)
SCL_SET(0);
delayus(5); // 保持4.7uS以上(TLOW)
Data <<= 1;
}
return IIC_GetACK();
}
//*********************************************************************
// 功能描述:主设备向从设备读取一个字节
// 返回值: 读到的字节
// *********************************************************************/
unsigned char IIC_RecByte(void) // 接收单字节的数据,并返回该字节值
{
unsigned char i,rbyte=0;
SDA_SET(1);
for(i=0;i<8;i++) // 读出时是用时钟上升沿同步数据
{
SCL_SET(0);
delayus(5); // 保持4.7uS以上(TLOW)
SCL_SET(1);
delayus(4); // 保持4.0uS以上(THIGH)
if(SDA) rbyte|=(0x80>>i);
}
SCL_SET(0);
return rbyte;
}
上图4个文件下载 c代码(请自行移植到各单片机平台):
源代码.zip
(1.82 KB)
(下载次数: 32, 2022-3-22 08:38 上传)
下载积分: 黑币 -5
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版