2
收藏
微博
微信
复制链接

I2c操作pcf8591 哪位帮看一下吧

提问于
2022-07-22 05:57

#include
#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();
        }
}
那个加黑的部分为什么要加,什么作用,不加为什么就得不到正确结果

收藏 625 0 2
粉丝
0
关注
0
主题
1
前面有个语句SCL=1,后面的语句SCL=0;这样才能形成一个脉冲,只有在脉冲的驱动下,才能工作。
0

回答于 · 2022-07-22 23:36

粉丝
0
关注
0
主题
7
谢谢大家了
0

回答于 · 2022-07-23 02:31