📄 save.h
字号:
/*****************启动总线**********************/
void start(void)
{ //
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_(); //
}
/*****************停止IIC总线****************/
void stop(void)
{
SDA=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
}
/*****************发送应答信号****************/
void ack(void)
{
SDA=0;
_nop_();
_nop_(); ;
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
}
/*****************发送无应答信号****************/
void noack(void)
{
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
_nop_();
_nop_();
}
/*****************检查应答信号****************/
bit cack(void)
{
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
CY=SDA;
SCL=0;
_nop_();
_nop_();
return (CY);
}
uchar in()
{
uchar read_data;
for(i = 0; i < 8; i++)
{
SDA=1;
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
read_data <<= 1;
read_data |= (uchar)SDA;
_nop_();
_nop_();
SCL = 0;
_nop_();
_nop_();
}
return(read_data);
}
void out(uchar write_data)
{
//uchar i;
for(i = 0; i < 8; i++) // 循环移入8个位
{
write_data<<=1;
SDA=CY;
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
}
_nop_();
_nop_();
}
void write(uchar addr,uchar *databuf,uchar number ) // 在指定地址addr处写入数据write_data
{
//uchar i;
wr: start();
out(0xa0);
if(cack())
stop();
else
{
out(addr);
if(cack())
stop();
else
{
for(i=0;i<number;i++)
{
out(*databuf++);
if(cack())
goto wr;
}
stop();
}
}
delay(10); // 写入周期
}
void read(uchar addr,uchar *databuf,uchar number)
// 在指定地址读取
{ //uchar i;
rd: start();
out(0xa0);
if(cack())
stop();
else
{
out(addr);
if(cack())
stop();
else
{
start();
out(0xa1);
if(cack())
goto rd;
else
{
for(i=0;i<number-1;i++)
{
*databuf=in();
ack();
databuf++;
}
*databuf=in();
noack();
stop();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -