是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();}