51单片机在读取温度的时候为什么要跳过rom 以及转换温度这个指令是干嘛用的
时间: 2024-02-23 15:57:30 浏览: 22
在51单片机中,读取温度需要使用温度传感器,如DS18B20等。这些传感器一般都是通过1-Wire总线与单片机通讯的。在读取温度的过程中,需要跳过ROM指令来确定要读取哪个传感器的温度值。因为在1-Wire总线上可能连接多个传感器,每个传感器都有唯一的ROM编号,所以需要先发送跳过ROM指令来确定要读取哪个传感器的温度值。
转换温度的指令是将传感器采集到的温度值转换为可读取的数字信号。具体来说,DS18B20温度传感器采用的是12位分辨率,即将温度值转换为12位二进制数。转换温度的指令会触发传感器内部的温度转换机制,并将转换后的12位二进制数传输给单片机。单片机再将这些数字信号进行运算和处理,最终得到温度值。
相关问题
基于51单片机写一个DS18B20的温度转换与读取流程
1. 定义DS18B20温度传感器的引脚
#define DQ P2_0
2. 发送复位脉冲
void DS18B20_Reset(void)
{
DQ = 0; //将DQ引脚拉低
delay_us(480); //延时480us
DQ = 1; //将DQ引脚拉高
delay_us(60); //延时60us
while(!DQ); //等待DS18B20拉低DQ引脚
}
3. 发送一个字节数据
void DS18B20_WriteByte(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
DQ = 0; //将DQ引脚拉低
delay_us(2); //延时2us
DQ = dat & 0x01; //写入最低位
delay_us(60); //延时60us
DQ = 1; //将DQ引脚拉高
dat >>= 1; //移位
}
}
4. 读取一个字节数据
unsigned char DS18B20_ReadByte(void)
{
unsigned char i, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0; //将DQ引脚拉低
delay_us(2); //延时2us
DQ = 1; //将DQ引脚拉高
delay_us(8); //延时8us
dat >>= 1; //移位
if(DQ) dat |= 0x80; //读入最高位
delay_us(60); //延时60us
}
return dat;
}
5. 发送温度转换指令
void DS18B20_Convert(void)
{
DS18B20_Reset(); //发送复位脉冲
DS18B20_WriteByte(0xcc); //跳过ROM操作
DS18B20_WriteByte(0x44); //发送温度转换指令
delay_ms(750); //等待转换完成
}
6. 读取温度值
int DS18B20_ReadTemperature(void)
{
unsigned char temp_l, temp_h;
int temp;
DS18B20_Reset(); //发送复位脉冲
DS18B20_WriteByte(0xcc); //跳过ROM操作
DS18B20_WriteByte(0xbe); //发送读取温度指令
temp_l = DS18B20_ReadByte(); //读取温度低位
temp_h = DS18B20_ReadByte(); //读取温度高位
temp = temp_h;
temp <<= 8;
temp |= temp_l;
temp = (float)temp * 0.0625; //转换成实际温度值
return temp;
}
7. 主函数中的调用方式
int main()
{
int temp;
while(1)
{
DS18B20_Convert(); //发送温度转换指令
temp = DS18B20_ReadTemperature(); //读取温度值
//处理温度值
}
}
温度报警器为什么用51单片机
温度报警器使用51单片机的原因可能有以下几点:
1. 成本低廉:51单片机是一种价格低廉的微控制器,能够满足温度报警器的基本需求。
2. 稳定性高:51单片机在市场上已经存在很长时间,在工业应用中已经得到了广泛的验证和应用,其稳定性和可靠性非常高。
3. 易于编程:51单片机的编程语言是汇编语言和C语言,这两种语言都非常容易学习和使用,对开发人员的编程能力要求不高。
4. 灵活性强:51单片机具有很强的可编程性和可扩展性,可以根据温度报警器的实际需求进行定制。
总之,使用51单片机作为温度报警器的控制芯片是一种经济实用的选择。