?? 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 + -