📄 24c02.h
字号:
#ifndef _24c02_H
#define _24c02_H
#include "reg52.h"
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
sbit SDA = P2^1;
sbit SCL = P2^0;
void iic_start(void)
{
SDA = 1;
_nop_();
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}
void iic_stop(void)
{
SDA = 0;
_nop_();
SCL = 1;
somenop;
SDA = 1;
}
void iic_ack(bit ackbit)
{
if(ackbit)
SDA = 0;
else
SDA = 1;
somenop;
SCL = 1;
somenop;
SCL = 0;
SDA = 1;
somenop;
}
bit iic_waitack(void)
{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
iic_stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}
void iic_sendbyte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
SDA = 1;
else
SDA = 0;
somenop;
SCL = 1;
byt <<= 1;
somenop;
SCL = 0;
}
}
unsigned char iic_recbyte(void)
{
unsigned char da;
unsigned char i;
for(i=0;i<8;i++)
{
SCL = 1;
somenop;
da <<= 1;
if(SDA)
da |= 0x01;
SCL = 0;
somenop;
}
return da;
}
void delay_50us(unsigned int t)
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--)
;
}
bit ISendStr(unsigned char add1,unsigned char add2,unsigned char *s,unsigned char no)
{
unsigned char i;
iic_start();
iic_sendbyte(add1);
if(iic_waitack()==0)
return 0;
iic_sendbyte(add2);
if(iic_waitack()==0)
return 0;
for(i=0;i<no;i++)
{
iic_sendbyte(*s);
if(iic_waitack()==0)
return 0;
delay_50us(10);
s++;
}
iic_stop();
return 1;
}
bit IRcvStr(unsigned char add1,unsigned char add2,unsigned char *s,unsigned char no)
{
unsigned char i;
iic_start();
iic_sendbyte(add1);
if(iic_waitack()==0)
return 0;
iic_sendbyte(add2);
if(iic_waitack()==0)
return 0;
iic_start();
iic_sendbyte(add1+1);
if(iic_waitack()==0)
return 0;
for(i=0;i<no-1;i++)
{
*s=iic_recbyte();
iic_ack(1);
s++;
delay_50us(10);
}
*s=iic_recbyte();
iic_ack(0);
iic_stop();
return(1);
}
unsigned char read(unsigned char add)
{
unsigned char temp;
iic_start();
iic_sendbyte(0xae);
iic_waitack();
iic_sendbyte(add);
iic_waitack();
iic_start();
iic_sendbyte(0xaf);
iic_waitack();
temp=iic_recbyte();
iic_ack(0);
iic_stop();
return temp;
}
void write(unsigned char add,unsigned char dat)
{
iic_start();
iic_sendbyte(0xae);
iic_waitack();
iic_sendbyte(add);
iic_waitack();
iic_sendbyte(dat);
iic_waitack();
iic_stop();
}
void wrbyte_24c02(unsigned char add,unsigned char dat)
{
iic_start();
iic_sendbyte(0xae);
iic_waitack();
iic_sendbyte(add);
iic_waitack();
iic_sendbyte(dat);
iic_waitack();
iic_stop();
delay_50us(100);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -