标题: I2c操作pcf8591 哪位帮看一下吧,谢谢了 [打印本页]

作者: aaa123    时间: 2013-7-29 18:06
标题: I2c操作pcf8591 哪位帮看一下吧,谢谢了
#include<reg51.h>
#define uchar unsigned char
sbit scl=P2^1;
sbit sda=P2^0;
uchar ack_sign;           //应答标志 应答为1,不应答为0
void delay()
{
        uchar i=1;
        while(i--);
}
void start()   //开始信号  在scl为1时sda一个下降沿
{
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
        scl=0;           //记住这句一定要加,
        delay();
}
void stop()          //终止信号   在scl为1是sda一个上升沿
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
        scl=0;         //始终搞不懂这里为什么要加这个
        delay();
}
void write(uchar Data)                //写一个字节
{
        uchar i;
        for(i=0;i<8;i++)  //传送一个字节
        {
                Data<<=1;
                delay();
                scl=0;
                delay();
                sda=CY;
                delay();
                scl=1;
                delay();       
        }
        scl=0;
        delay();
        sda=1;                 //释放总线,以便应答,记住这里
        delay();
        scl=1;
        delay();
        if(sda==1)
                ack_sign=0;
        else
                ack_sign=1;
}
void main()
{
a:        while(1)
        {
                start();
                write(0x90);
                if(ack_sign==0)           //为0表示没应答,数据传输出错,无效,重新开始
                        goto a;
                write(0x40);
                if(ack_sign==0)
                        goto a;
                write(0xff);
                if(ack_sign==0)
                        goto a;
                stop();
        }
}
那个加黑的部分为什么要加,什么作用,不加为什么就得不到正确结果


作者: 扬帆远航    时间: 2013-8-3 15:18
前面有个语句SCL=1,后面的语句SCL=0;这样才能形成一个脉冲,只有在脉冲的驱动下,才能工作。
作者: aaa123    时间: 2013-8-3 15:48
谢谢大家了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1