#include <reg51.h>
#include <intrins.h>
#include <absacc.h>
#include "iic.h"
#define IIC_Delay(); {_NOP();_NOP();}
sbit SDA=P3^4;
sbit SCL=P3^3;
void DelayShortms(uchar ms)
{
uchar i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++)
;
}
void IIC_Init(void)
{
SDA=1;
SCL=1;
}
void IIC_Start(void)
{
SDA=1;
SCL=1;
IIC_Delay();
SDA=0;
IIC_Delay();
SCL=0;
}
void IIC_Stop(void)
{
SDA=0;
IIC_Delay();
SCL=1;
IIC_Delay();
SDA=1;
}
bit IIC_Send(uchar Send_Dat)
{
uchar i;
bit ack;
for(i=0;i<8;i++)
{
SDA=(bit)(Send_Dat&0x80);
Send_Dat<<=1;
IIC_Delay();
SCL=1;
IIC_Delay();
SCL=0;
IIC_Delay();
}
SDA=1;
IIC_Delay();
SCL=1;
IIC_Delay();
ack=SDA;
SCL=0;
IIC_Delay();
return ack;
}
uchar IIC_Receive(void)
{
uchar i,Receive_Dat=0;
for(i=0;i<8;i++)
{
SCL=1;
IIC_Delay();
Receive_Dat<<=1;
Receive_Dat|=SDA;
SCL=0;
IIC_Delay();
}
return Receive_Dat;
}
void WrAddDat(uchar Add,Dat)
{
IIC_Start();
IIC_Send(0xA0);
IIC_Send(Add);
IIC_Send(Dat);
IIC_Stop();
DelayShortms(10);
}
uchar WrAddRdDat(uchar Add)
{
uchar Dat;
IIC_Start();
IIC_Send(0xA0);
IIC_Send(Add);
IIC_Start();
IIC_Send(0xA1);
Dat=IIC_Receive();
IIC_Stop();
return Dat;
}
测试通过 |
|