hanwe 发表于 2023-1-8 17:09

程序一直循环

设断点发现,程序会一直循环,这是为何?按理说发送完成SSP1IF会置1

void I2C_Start()                        //开启I2C
{
    SSP1CON2bits.SEN = 1; //开启指令
    while (SSP1CON2bits.SEN == 1);
}


void I2C_Stop()                               //停止I2C
{
    SSP1CON2bits.PEN = 1;
    while (SSP1CON2bits.PEN);
}

void write_eeprom(unsigned char address)
{
      unsigned char m;
      I2C_Start();                                    //开启
      PIR1bits.SSP1IF = 0;
      SSP1BUF = 0xA0 ;                           //E2PROM地址                           
      while (!PIR1bits.SSP1IF);
      PIR1bits.SSP1IF = 0;
      SSP1BUF = address;                         //写地址                           
       while(!PIR1bits.SSP1IF);
      PIR1bits.SSP1IF = 0;
      for (m= 0;m < 6; m++)
      {
            SSP1BUF = EE_Data;                  //数值
            while(!PIR1bits.SSP1IF);
            PIR1bits.SSP1IF == 0;
      }
      I2C_Stop();
      PIR1bits.SSP1IF = 0;
    }

chuxh 发表于 2023-1-8 17:14

刚弄完此类项目,pic的iic比较麻烦

xxrs 发表于 2023-1-8 17:15

所有程序编程 都是需要一段时间去解决的。慢慢来吧。

zhuhuis 发表于 2023-1-8 17:17

程序可不好做,基本都是慢慢整出来的,不要着急慢慢来。

jiajs 发表于 2023-1-8 17:19

你这是和IIC接口EE通信,那还要查看相关EE的数据手册,看看读写时序,再看看IIC的时序对不对

jlyuan 发表于 2023-1-8 17:21


什么叫一直循环

happy_10 发表于 2023-1-8 17:22

用MCC配置出来的代码,比较一下看怎么样

chenho 发表于 2023-1-8 17:24

发送完一直循环?

zqc831 发表于 2023-1-13 09:44

for (m= 0;m < 6; m++)
      {
            SSP1BUF = EE_Data;                  //数值
            while(!PIR1bits.SSP1IF);
            PIR1bits.SSP1IF == 0;   //这里多了一个 “=”号
      }
页: [1]
查看完整版本: 程序一直循环