?? 2401.c
字號:
#include <stc89c51.h>
#include <intrins.h>
#include "source.h"
/* 5ms延時 */
void ms (void)
{ uchar i=20,j;
do
{ j=250;
while(--j);
}
while(--i);
}
/* 啟動I2C */
void ic_start (void)
{ io=1;
clk=1;
nop;
io=0;
nop;
clk=0;
nop;
}
/* 停止I2C */
void ic_over (void)
{ io=0;
clk=0;
nop;
clk=1;
nop;
io=1;
nop;
}
/* 應(yīng)答檢測 */
void check_ack (void)
{ io=1;
clk=1;
nop;
clk=0;
nop;
}
/* 應(yīng)答 */
void ack (void)
{ io=0;
clk=1;
nop;
clk=0;
nop;
}
/* 非應(yīng)答 */
void no_ack (void)
{ io=1;
clk=1;
nop;
clk=0;
io=0;
nop;
}
/* 寫一個字節(jié) */
void write_byte (uchar d)
{ uchar i=8;
do
{ if(d&0x80)
{ io=1;
clk=1;
nop;
clk=0;
io=0;
nop;
}
else
{ io=0;
clk=1;
nop;
clk=0;
nop;
}
d<<=1;
}
while(--i);
}
/* 讀一個字節(jié) */
uchar read_byte (void)
{ uchar i=8,d;
io=1;
do
{ clk=1;
nop;
d<<=1;
if(io)
{ d|=0x01;
clk=0;
nop;
}
else
{ d&=0xfe;
clk=0;
nop;
}
}
while(--i);
return d;
}
/* 向I2C寫數(shù)據(jù) */
void ic_write (uint add,uchar d)
{ uchar i,j;
j=(uchar)add;
i=(uchar)(add/256);
i<<=1;
i+=0xa0;
ic_start();
write_byte(i);
check_ack();
write_byte(j);
check_ack();
write_byte(d);
check_ack();
ic_over();
}
/* 從I2C讀數(shù)據(jù) */
void ic_read (uint add,uchar len)
{ uchar i=0,j,k;
j=(uchar)add;
k=(uchar)(add/256);
k<<=1;
k+=0xa0;
ic_start();
write_byte(k);
check_ack();
write_byte(j);
check_ack();
ic_start();
k|=0x01;
write_byte(k);
check_ack();
do
{ ic_data[i]=read_byte();
ack();
i+=1;
}
while(--len);
ic_data[i]=read_byte();
no_ack();
ic_over();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -