兼容SPI接口的低功耗数字温度传感器ADT7301及其接口技术
为高电平,那么,控制寄存器中的数据将不会被装入,但此时工作模式不变。
2.3温度值编码
温度值寄存器是一个14位的只读寄存器,用于存储ADC的13位二进制补码加1位符号位的温度转换结果(最高位为符号位)。理论上,ADC测量的温度范围可达255℃,实际上,内部温度传感器能确保的温度范围为-40℃~+150℃。温度数据格式如表1所列。
表1温度寄存器数据格式
温度值(℃)数据输出DB13DB0-4011,101100000000-3011,110001000000-2511,110011100000-1011,111011000000-0.312511,111111111111000,000000000000+0.312500,000000000001+1000,000101000000+2500,001100100000+5000,011001000000+7500,100101100000+10000,110010000000+12500,111110100000+15001,001011000000
其温度转换公式如下:
正温度值=ADC转换结果代码(d)/32;
负温度值=(ADC转换结果代码(d)-16384)/32(使用符号位);
负温度值=(ADC转换结果代码(d)-8192)/32(不使用符号位)。
3应用电路
3.1ADT7301与单片机的串行接口电路
图3为ADT7301与单片机的串行通讯接口电路,该接口方式具有转换速度快的优点,但不能被设置成节电工作模式。
这里应注意的是:由于在单片机串行通讯中是先低后高,而ADT7301在向外串行输出温度值时是先高后低,所以要先进行高低位互换?然后再进行处理,具体处理程序这里不再给出。下面是ADT7301与8051单片机进行串行接口的软件编程:
;*****主程序*****
main:
callreceive?;读取温度值子程序
calldispose?;读取结果处理子程序
sjmp$
;###串行通讯子程序###
receive:setbp1.3
movscon,#11h?;选择串行口为方式0接收
movr7,#2;字节计数
movr0,#30h;指向温度值缓冲区
clrp1.3;选通ADT7301
clrri?;清接收中断标志,准备接收
loop:jnbri,$
mova,sbuf
mov@r0,a
incr0
clrri
djnzr7,loop
setbp1.3
ret
3.2ADT7301与单片机的全双工通讯接口
通过ADT7301与单片机的全双工通讯接口可以使ADT7301工作在节电模式。图4是ADT7301与8051单片机进行全双工通讯接口连接图。相应的软件编程如下。
?###全双工通讯子程序###
setbp1.3
movr0,#30h?;读温度值缓冲器?30h31h?
movr1,#32h?;控制寄存器写入值(32h33h)
movr6,#08h?;循环移位计数
movr7,#02h?;字节计数
clrp1.3?;选通
loop0:
setbp1.0?;控制p1.0产生下降沿
clrp1.0?;准备读取数据
movcy,p1.1?;读值
mova,@r0?;将上次结果重装入
rlca?;移位存储读取结果
mov@r0,a?;暂存
mova,@r1?;将要写入值给累加器
rlca?;移出要写入位
movp1.2,cy?;循环写入
mov@r1,a?;暂存
djnzr7?loop0
incr0
incr1
djnzr7,loop0
clrp 《兼容SPI接口的低功耗数字温度传感器ADT7301及其接口技术(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/147088.html
2.3温度值编码
温度值寄存器是一个14位的只读寄存器,用于存储ADC的13位二进制补码加1位符号位的温度转换结果(最高位为符号位)。理论上,ADC测量的温度范围可达255℃,实际上,内部温度传感器能确保的温度范围为-40℃~+150℃。温度数据格式如表1所列。
表1温度寄存器数据格式
温度值(℃)数据输出DB13DB0-4011,101100000000-3011,110001000000-2511,110011100000-1011,111011000000-0.312511,111111111111000,000000000000+0.312500,000000000001+1000,000101000000+2500,001100100000+5000,011001000000+7500,100101100000+10000,110010000000+12500,111110100000+15001,001011000000
其温度转换公式如下:
正温度值=ADC转换结果代码(d)/32;
负温度值=(ADC转换结果代码(d)-16384)/32(使用符号位);
负温度值=(ADC转换结果代码(d)-8192)/32(不使用符号位)。
3应用电路
3.1ADT7301与单片机的串行接口电路
图3为ADT7301与单片机的串行通讯接口电路,该接口方式具有转换速度快的优点,但不能被设置成节电工作模式。
这里应注意的是:由于在单片机串行通讯中是先低后高,而ADT7301在向外串行输出温度值时是先高后低,所以要先进行高低位互换?然后再进行处理,具体处理程序这里不再给出。下面是ADT7301与8051单片机进行串行接口的软件编程:
;*****主程序*****
main:
callreceive?;读取温度值子程序
calldispose?;读取结果处理子程序
sjmp$
;###串行通讯子程序###
receive:setbp1.3
movscon,#11h?;选择串行口为方式0接收
movr7,#2;字节计数
movr0,#30h;指向温度值缓冲区
clrp1.3;选通ADT7301
clrri?;清接收中断标志,准备接收
loop:jnbri,$
mova,sbuf
mov@r0,a
incr0
clrri
djnzr7,loop
setbp1.3
ret
3.2ADT7301与单片机的全双工通讯接口
通过ADT7301与单片机的全双工通讯接口可以使ADT7301工作在节电模式。图4是ADT7301与8051单片机进行全双工通讯接口连接图。相应的软件编程如下。
?###全双工通讯子程序###
setbp1.3
movr0,#30h?;读温度值缓冲器?30h31h?
movr1,#32h?;控制寄存器写入值(32h33h)
movr6,#08h?;循环移位计数
movr7,#02h?;字节计数
clrp1.3?;选通
loop0:
setbp1.0?;控制p1.0产生下降沿
clrp1.0?;准备读取数据
movcy,p1.1?;读值
mova,@r0?;将上次结果重装入
rlca?;移位存储读取结果
mov@r0,a?;暂存
mova,@r1?;将要写入值给累加器
rlca?;移出要写入位
movp1.2,cy?;循环写入
mov@r1,a?;暂存
djnzr7?loop0
incr0
incr1
djnzr7,loop0
clrp 《兼容SPI接口的低功耗数字温度传感器ADT7301及其接口技术(第2页)》