• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stc8g1k08的ic硬件例程读取数据问题

yhj416606438 2022-02-14 浏览量:990
写入正常,读取都是ff,已经设置开漏模式,外置3.3k上拉电阻了,是什么原因
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 用示波器测一下输出与输入的信号波形吧,不然无法分析
    • 发布于 2022-03-02
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 你怎么确定你写入是正常的?!
    • 发布于2022-02-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 是iic,不是ic吧

    I2C初始化

    void init_i2c(void)
    {
        uchar temp = 0x00;                            
        
    //                                        //切换到第一组I2C
    //    temp &= ~(I2C_S0 | I2C_S1);            //I2C_S0=0 I2C_S1=0
    //                                        //(P1.5/SCL P1.4/SDA)

    //                                        //切换到第二组I2C
    //    temp &= ~(I2C_S0 | I2C_S1);            //I2C_S0=1 I2C_S1=0
    //    temp |= I2C_S0;                        //(P2.5/SCL P2.4/SDA)

    //                                        //切换到第三组I2C
    //    temp &= ~(I2C_S0 | I2C_S1);            //I2C_S0=0 I2C_S1=1
    //    temp |= I2C_S1;                        //(P7.7/SCL P7.6/SDA)
        
                                            //切换到第四组I2C
        temp |= (I2C_S0 | I2C_S1);            //I2C_S0=1 I2C_S1=1
                                            //(P3.2/SCL P3.3/SDA)
        
        temp |= EAXFR;                        //I2C功能寄存器为扩展 SFR,逻辑地址位于 XDATA 区域,访问前需要将 P_SW2(BAH)寄存器的最高位(EAXFR)置 1
        
        P_SW2 = temp;
        

        I2CCFG = 0xE0;                              //使能I2C主机模式
        I2CMSST = 0x00;
    }
    I2C操作代码
    void wait()
    {
        while(!(I2CMSST & 0x40));
        I2CMSST &= ~0x40;
    }

    void start()
    {
        I2CMSCR = 0x01;                             //发送START命令
        wait();
    }

    void send_data(uchar dat)
    {
        I2CTXD = dat;                               //写数据到数据缓冲区
        I2CMSCR = 0x02;                             //发送SEND命令
        wait();
    }

    void recv_ack()
    {
        I2CMSCR = 0x03;                             //发送读ACK命令
        wait();
    }

    uchar recv_data()
    {
        I2CMSCR = 0x04;                             //发送RECV命令
        wait();
        return I2CRXD;
    }

    void send_ack()
    {
        I2CMSST = 0x00;                             //设置ACK信号
        I2CMSCR = 0x05;                             //发送ACK命令
        wait();
    }

    void send_nack()
    {
        I2CMSST = 0x01;                             //设置NAK信号
        I2CMSCR = 0x05;                             //发送ACK命令
        wait();
    }

    void stop()
    {
        I2CMSCR = 0x06;                             //发送STOP命令
        wait();
    }


    • 发布于2022-03-03
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stc8g1k08的ic硬件例程读取数据问题