📄 iic.c
字号:
/**************************************************************
**文件功能:24c04的驱动函数 **
**创建人:xingyuegu **
**创建日期:2006-7-12 **
**版本:1.0 **
**************************************************************/
#include <reg51.h> #include <reg51.h>
#include <intrins.h>
#include "common.h"
#define nop() _nop_()
#define WriteDeviceAddress 0xa0 //写驱动地址指令
#define ReadDeviceAddress 0xa1 //读驱动地址指令
//sbit AT24C04_SCL=P2^0;
//sbit AT24C04_SDA=P2^1;
void delay10ms(void)
{
uint i;
for(i=0;i<6000;i++);
}
//启动信号
void Start(void)
{
AT24C04_SCL=0;
AT24C04_SDA=1;
nop();
nop();
nop();
nop();
nop();
AT24C04_SCL=1;
nop();
nop();
nop();
nop();
nop();
AT24C04_SDA=0;
nop();
nop();
nop();
nop();
nop();
}
//停止信号
void Stop(void)
{ AT24C04_SCL=0;
nop();
nop();
nop();
nop();
nop();
nop();
AT24C04_SDA=0;
AT24C04_SCL=1;
nop();
nop();
nop();
nop();
AT24C04_SDA=1;
nop();
nop();
nop();
nop();
nop();
nop();
}
//发应答信号
void ack(void)
{
AT24C04_SCL=0;
nop();
nop();
AT24C04_SDA=0;
AT24C04_SCL=1;
nop();
nop();
}
//发非应答信号
void no_ack(void)
{
AT24C04_SCL=0;
nop();
nop();
AT24C04_SDA=1;
AT24C04_SCL=1;
nop();
nop();
}
//写字节
bit write8bit(uchar input)
{
uchar i;
for(i=0;i<8;i++)
{
AT24C04_SCL=0;
input=input<<1;
AT24C04_SDA=CY;
nop();
nop();
AT24C04_SCL=1;
nop();
}
AT24C04_SCL=0; //read ack
nop();
//AT24C04_SDA=1;
nop();
nop();
// nop();
AT24C04_SCL=1;
nop();
CY=AT24C04_SDA;
if(CY)
return 0;
else
return 1;
//return(CY);
}
//读字节
uchar read8bit(void)
{
uchar i,readdata;
for(i=0;i<8;i++)
{
AT24C04_SCL=0;
nop();
readdata=(readdata<<1)|AT24C04_SDA;
AT24C04_SCL=1;
nop();
}
return readdata;
}
void write_byte(uchar address,uchar output)
{
Start();
write8bit(WriteDeviceAddress);
write8bit(address);
write8bit(output);
Stop();
delay10ms();
}
uchar random_read(uchar address)
{
uchar rddata;
Start();
write8bit(WriteDeviceAddress);
write8bit(address);
Start();
write8bit(ReadDeviceAddress);
rddata=read8bit();
no_ack();
Stop();
delay10ms();
return rddata;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -