{ sda=1; delay(); scl=1; delay(); sda=0; delay(); } 应答信号:每传送一个字节数据,都要有接收设备产生应答信号。在SCL为高电平期间,接收设备将SDA拉为低电平表示数据传输正确。 { uchar i; scl=1; delay(); while((sda==1)&&(i<250))i++; scl=0; delay(); } 停止信号:在全部数据发送完毕后,主机发送停止信号。即在SCL为高电平期间,SDA上产生一个上升沿信号。 停止信号: void stop() { sda=0; delay(); scl=1; delay(); sda=1; delay(); } IIC总线初始化 void init() { sda=1; delay(); scl=1; delay(); } 根据IIC总线写数据函数: void write_byte(uchar date) //写数据函数 { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1;//将数据左移一位,最高位移至CY scl=0; delay(); sda=CY; delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); } 根据IIC读数据函数 uchar read_byte() { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); k=(k<<1)|sda; scl=0; delay(); } return k; } 在某寄存器上写数据 void write_add(uchar address,uchar date) //在某地址上写数据 { start(); write_byte(0xa0); //发送器件地址,最低位为0,表示主机发送 respons(); //应答 write_byte(address);//发送某器件存储单元地址 respons(); //应答 write_byte(date); //写数据 respons(); //应答 stop(); //停止 } 其中a0表示主机固定地址。 在模寄存器上读数据 uchar read_add(uchar address) //在某地址上读数据 { uchar date; start(); write_byte(0xa0); //发送器件地址,最低位为0,表示主机发送 respons(); //应答 write_byte(address);//发送某器件存储单元地址,表示要读此位置的数据 respons(); //应答 start(); write_byte(0xa1);//发送器件地址,最低位为1,表示主机接受数据 respons(); date=read_byte(); stop(); return date; } |
|
来自: 昵称40402247 > 《待分类》