I²C底层协议较为复杂,其特点是只有一个主机(单片机),它和其他的从设备可以相互通信,而从设备之间无法直接相互通信。作为初学者只需要掌握初始化和调用函数即可,该总线的作用是单片机和各个芯片之间进行通信,它们之间的通信有一种协议。
连接原理图如下:
void I2C_ Configuration(); //I2C初始化
void I2C_ SAND_ BUFFER(); //I2C发送数据串
void I2C_ SAND_ BYTE(); //I2C发送一个字节.
void I2C_ READ_ BUFFER(); //I2C读取数据串
u8 I2C_ READ_ BYTE(); //I2C读取一个字节
该函数和上面函数基本形参意义相同,不同的是,该函数为发送函数。
对于初学者应用,只需要掌握两个函数即可,即函数如下:
void LM75A_GetTemp(u8 *Tempbuffer);//读温度
void LM75A_POWERDOWN(void); //掉电模式
相应的寄存器功能如下:
其中,读取温度函数和设置掉电模式方式分别如下:
void LM75A_GetTemp(u8 *Tempbuffer){
u8 buf[2]; //温度值储存
u8 t=0,a=0;
I2C_READ_BUFFER(LM75A_ADD,0x00,buf,2); //读出温度值(器件地址,子地址,数据储存器,字节数)
t = buf[0]; //处理温度整数部分,0~125度
*Tempbuffer = 0; //温度值为正值
if(t & 0x80){ //判断温度是否是负(MSB表示温度符号)
*Tempbuffer = 1; //温度值为负值
t = ~t; t++; //计算补码(原码取反后加1)
}
if(t & 0x01){ a=a+1; } //从高到低按位加入温度积加值(0~125)
if(t & 0x02){ a=a+2; }
if(t & 0x04){ a=a+4; }
if(t & 0x08){ a=a+8; }
if(t & 0x10){ a=a+16; }
if(t & 0x20){ a=a+32; }
if(t & 0x40){ a=a+; }
Tempbuffer++;
*Tempbuffer = a;
a = 0;
t = buf[1]; //处理小数部分,取0.125精度的前2位(12、25、37、50、62、75、87)
if(t & 0x20){ a=a+12; }
if(t & 0x40){ a=a+25; }
if(t & 0x80){ a=a+50; }
Tempbuffer++;
*Tempbuffer = a;
}
//LM75进入掉电模式,再次调用LM75A_GetTemp();即可正常工作
//建议只在需要低功耗情况下使用
void LM75A_POWERDOWN(void){//
I2C_SAND_BYTE(LM75A_ADD,0x01,1); //
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务