哦?酱紫,那请大家看看我的程序。
这是个读数据程序
谢谢!
sbit SCL=P1^0;
sbit SDA=P1^1;
PUBLIC void start(void)
{
SDA=1;
SCL=1;
TIMING_STABLE();
SDA=0;
DELAY_WAIT();
SCL=0;
TIMING_STABLE();
}
PUBLIC void stop(void)
{
SDA=0;
SCL=1;
TIMING_STABLE();
SDA=1;
TIMING_STABLE();
SCL=0;
TIMING_STABLE();
}
PUBLIC void write_da(u8 send_byte) //写数据
{
XDATA u8 j=8;
for(;j> 0;j--)
{
send_byte < <=1;
SDA=CY;
DELAY_WAIT();
SCL=1;
TIMING_STABLE();
SCL=0;
TIMING_STABLE();
}
SDA=1;
}
PUBLIC void re_ack(void) //读ACK
{
XDATA u8 i=128;
do
{
CY=SDA;
i--;
}while(CY!=0 && i> 0);
SCL=1;
TIMING_STABLE();
SCL=0;
TIMING_STABLE();
PUBLIC u8 read_da(void) //读数据
{
XDATA u8 receivebyte=0;
XDATA u8 i=8;
while(i--)
{
receivebyte=(receivebyte < <1)|SDA;
DELAY_WAIT();
SCL=1;
TIMING_STABLE();
SCL=0;
TIMING_STABLE();
}
return(receivebyte);
}
PUBLIC void TIMING_STABLE(void) //延时
{
XDATA u8 i=1;
XDATA u8 j;
for(;i> 0;i--)
{
j=1;
for(;j> 0;j--)
{
_nop_();
}
}
}
PUBLIC void DELAY_WAIT(void) //延时
{
XDATA u8 j=1;
for(;j> 0;j--)
{
_nop_();
}
}
PUBLIC void read_from(u8 address,u8 *re_address) //读数据主程序段
{
start();
write_da(0xa0);
re_ack();
write_da(address);
re_ack();
start();
write_da(0xa1);
re_ack();
*re_address=read_da();
stop();
DELAY_WAIT();
}
发表时间:2003年11月13日17:24:43