#include <reg51.h>
#include <intrins.h>
#define somenop(); _nop_();_nop_();_nop_();_nop_();_nop_();
sbit SDA=0x91;
sbit SCL=0x90;
void I2CStart(void)
{
SDA=1;
somenop();
SCL=1;
somenop();
SDA=0;
somenop();
SCL=0;
somenop();
}
void I2CStop(void)
{
SDA=0;
somenop();
SCL=1;
somenop();
SDA=1;
somenop();
SCL=0;
somenop();
}
void I2CInit(void)
{
SCL=0;
somenop();
I2CStop();
}
bit I2CClock(void)
{
bit temp;
somenop();
SCL=1;
_nop_();_nop_();_nop_();
temp=SDA;
_nop_();_nop_();
SCL=0;
somenop();
return(temp);
}
bit I2CSendByte(char I2CData)
{
register unsigned char i;
for(i=0;i<8;i++)
{
SDA=(bit)(I2CData&0x80);
I2CData<<=1;
I2CClock();
}
SDA=1;
return(~I2CClock());
}
unsigned char I2CReceiveByte(void)
{
unsigned char I2CData=0;
register unsigned char i;
for(i=0;i<8;i++)
{
I2CData<<=1;
if(I2CClock()) I2CData++;
}
return(I2CData);
}
void I2CSendAck(void)
{
SDA=0;
I2CClock();
SDA=1;
}
void I2CSendNotAck(void)
{
SDA=1;
I2CClock();
SDA=1;
}
void Send(void)
{
I2CInit();
I2CStart();
I2CSendByte(0xA0);
I2CSendByte(0x80);
I2CSendByte(0x77);
I2CStop();
}
void Receive(void)
{
I2CStart();
I2CSendByte(0xA0);
I2CSendByte(0x80);
I2CStart();
I2CSendByte(0xA1);
ACC=I2CReceiveByte();
I2CSendNotAck();
I2CStop();
}
void main(void)
{
Send();
Receive();
}
24 系列存储器驱动.zip
版权申诉
195 浏览量
2023-01-12
10:29:46
上传
评论
收藏 1KB ZIP 举报
GZM888888
- 粉丝: 186
- 资源: 2962