新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于DS18B20与TMS320LF2407A的测温系统

基于DS18B20与TMS320LF2407A的测温系统

作者:时间:2010-02-26来源:网络收藏

/* 从传感器中读一个字节 */
void read_byte(unchar *ReadByte)
{
int i;
unchar temp=0;
unint loopindex=0;
PIN_HIGH();
for(i=0;i8;i++)
{
temp=temp>>1;
PIN_LOW();
nop();nop();nop();nop(); /*延时2us */
nop();nop();nop();nop();
PIN_HIGH();
for(loopindex=0;loopindex6;loopindex++){;} /* 延时14us */
PIN_LEAVE();
nop();
if((DATA_PORT DATA_BIT) == 0x0000)
{ temp=temp 0x7F; }
else
{ temp=temp | 0x80; }
PIN_HIGH();
for(loopindex=0;loopindex26;loopindex++){;} /* 延时60us */
}
*ReadByte=temp;
return;
}
/* 将读得的温度转化为十进制 */
float transform(unchar *T)
{
unchar temp=0;
float temprature=0;
temp=temp|(*(T+1)8);
temp=temp|*T;
if((temp0x0F800)==0x0F800)
{ temprature=0-((~temp)+1)*0.0625; }
else
{ temprature=temp*0.0625; }
return(temprature);
}
/* 读取温度主函数,返回十进制温度数 */
float read_temp()
{
Unchar buff[2];
float temprature=0;
unint loopindex=0;
while (reset()==1){}; /* 复位等待从机应答 */
write_byte(0xCC); /* 忽略ROM匹配 */
write_byte(0x44); /* 发送温度转化命令 */
for(loopindex=0;loopindex65535;loopindex++){;} /* 延时300ms,等待数模转换 */
for(loopindex=0;loopindex65535;loopindex++){;}
while(reset()==1){}; /* 再次复位,等待从机应答 */
write_byte(0xCC); /* 忽略ROM匹配 */
write_byte(0xBE); /* 发送读温度命令 */
read_byte(buff); /* 读出温度低8位 */
read_byte(buff+1); /* 读出温度高8位 */
temprature=transform(buff);
PIN_HIGH(); /* 释放总线 */
return(temprature);
}

本文引用地址:http://www.eepw.com.cn/article/195524.htm

  4 结束语

  DS20是一款非常优秀的单总线数字式传感器。硬件设计简单,运行可靠。通过分析C语言编译后的汇编语言可以很明确的计算出软件延时的时间,从而满足单线总线通讯的时序要求,从而可以出色的完成DSP与DS20通讯的软件设计。

  5 本文创新点有两个:

  1、通过C编译器编译出来的相应的C语言的延时程序,从而得到其对应的汇编语言,再通过定时器计时,能够知道单指令周期的时间,从而能够精确的计算出软件延时程序的延时时间。

  2、通常DS20都是与单片机配合使用的,而本文则详细的介绍了DS18与DSP的结合使用方法,其区别主要是在端口的操作上和延时的控制上。


上一页 1 2 3 下一页

关键词: 2407A 2407 18B B20

评论


相关推荐

技术专区

关闭