📄 iic.c
字号:
#define IIC_C
#include "common.h"
#include "iic.h"
#include "intrins.h"
#include "stdio.h"
#define AT24CXXPAGELEN 8
#define nops(); _nop_(); _nop_(); _nop_(); _nop_();
void start()
{
EA = 0;
IIC_SDA = 1;
IIC_SCL = 1;
nops();
IIC_SDA = 0;
nops();
IIC_SCL = 0;
EA = 1;
}
void stop()
{
EA = 0;
IIC_SCL = 0;
IIC_SDA = 0;
IIC_SCL = 1;
nops();
IIC_SDA = 1;
nops();
IIC_SCL = 0;
EA = 1;
}
/*
void ack()
{
IIC_SCL = 0;
IIC_SDA = 0;
nops();
IIC_SCL = 1;
nops();
IIC_SCL = 0;
nops();
}
*/
void noack()
{
EA = 0;
IIC_SDA = 1;
nops();
IIC_SCL = 0;
nops();
IIC_SCL = 1;
nops();
IIC_SCL = 0;
nops();
EA = 1;
}
uchar waitack()
{
uchar i=255;
EA = 0;
IIC_SDA = 1;
while(i--)
{
nops();
if(IIC_SDA == 0)
{
IIC_SCL = 0;
nops();
IIC_SCL = 1;
nops();
IIC_SCL = 0;
nops();
return 1;
}
}
stop();
EA = 1;
return 0;
}
void clockout(uchar dat)
{
uchar i;
EA = 0;
for(i=0;i<8;i++)
{
IIC_SCL = 0;
nops();
if(dat &0x80)
IIC_SDA = 1;
else
IIC_SDA = 0;
dat <<= 1;
IIC_SCL = 1;
nops();
IIC_SCL = 0;
nops();
}
EA = 1;
}
uchar clockin()
{
uchar i;
uchar c = 0;
EA = 0;
for(i=0;i<8;i++)
{
c <<= 1;
IIC_SCL = 0;
nops();
IIC_SCL = 1;
nops();
IIC_SDA = 1;
if(IIC_SDA == 1)
c |= 0x01;
IIC_SCL = 0;
nops();
}
EA = 1;
return c;
}
uchar readiic(uchar addr,uchar *pdat)
{
uchar c;
EA = 0;
start();
//device address
c = 0xa0;
clockout(c);
if(!waitack()) return 0;
//memory address
c = addr;
clockout(c);
if(!waitack()) return 0;
start();
//device address
c = 0xa1;
clockout(c);
if(!waitack()) return 0;
//read data
*pdat = clockin();
noack();
stop();
EA = 1;
return 1;
}
/*
uchar readiiccur(uchar *pdat)
{
uchar c;
start();
//device address
c = 0xa1;
clockout(c);
if(!waitack()) return 0;
//read data
*pdat = clockin();
noack();
stop();
return 1;
}
*/
/*
uchar readiicpage(uchar *pdat,uchar len)
{
uchar c,i;
if(len > AT24CXXPAGELEN)
return 0;
start();
//device address
c = 0xa1;
clockout(c);
if(!waitack()) return 0;
//read data
for(i=0; i<len; i++)
{
pdat[i] = clockin();
if(i != len-1)
ack();
}
noack();
stop();
return 1;
}
*/
uchar writeiic(uchar addr,uchar dat)
{
uchar c;
EA = 0;
start();
//device address
c = 0xa0;
clockout(c);
if(!waitack()) return 0;
//memory address
c = addr;
clockout(c);
if(!waitack()) return 0;
//write data
clockout(dat);
if(!waitack()) return 0;
stop();
EA = 1;
return 1;
}
/*
uchar writeiicpage(uchar addr,uchar *pdat,uchar len)
{
uchar i,c;
if(len > AT24CXXPAGELEN)
return 0;
start();
//device address
c = 0xa0;
clockout(c);
if(!waitack()) return 0;
//memory address
c = addr;
clockout(c);
if(!waitack()) return 0;
//write data
for(i=0; i<len; i++)
{
clockout(pdat[i]);
if(!waitack()) return 0;
}
stop();
return 1;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -