找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

请教关于DS1620的温度算法问题

[复制链接]
admin 发表于 2012-9-4 12:26:52 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
各位大侠好:
小弟单片机学的不怎么样了,现在在做了一个关于DS1620温度传感器方面的毕业设计。还没有做实物,现在在软件仿真的时候,出现了问题。就是温度读出来,显示不对,只是一个静态的值,调节也不变,搞了一段时间了,没有找到原因。我想是不是自己的程序出了问题,故向各位大侠求救!下面是一些程序,数码管用MAX7219驱动。
void write_byte(uchar val) //写字节子程序
{
uchar i;
uchar b;
b=1;
for(i=0;i<8;i++)
{
CLK_CONV=0;
DQ=(val&b);
CLK_CONV=1;
val=val>>1;
}
}
uchar read_byte(void) //读字节子程序
{
uchar i;
uchar value,b;
value=0;
b=1;
for(i=0;i<8;i++)
{
DQ=1;
CLK_CONV=0;
if (DQ)
value|=b;
CLK_CONV=1;
b<<=1;
}
return(value);
}
uchar DS1620startConv(void) //DS1620 开始转换
{
RST=1;
write_byte(0xEE);
RST=0;
return 0x00;
}

uchar DS1620ReadConf(void) //DS1620读配置 返回值为配置寄存器内容
{
uchar tmp;
RST=1;
write_byte(0xAC);
tmp=read_byte();
RST=0;
return tmp;
}
//DS1620 写配置,入回参数为配置寄存器新配置内容
uchar DS1620SetConf(uchar val)
{
uchar tmp;
RST=1;
write_byte(0x0C);
write_byte(val);
RST=0;
return tmp;
}
//DS1620 读温度转换数据,在返回值的低9位
uint DS1620read(void)
{
uchar hbyte,lbyte;
uint temp;
RST=1;
write_byte(0xAA);
lbyte=read_byte();
hbyte=read_byte();
RST=0;
temp=hbyte;
temp<<=8;
temp|=lbyte;
return temp;
}

void main() //主程序
{
SP=0xcf;
EA=0;
flag=0;
val=0x0a;
DS1620SetConf(val);
val=DS1620ReadConf();
DS1620startConv();
temp1=DS1620read(); //把温度值放入变量temp1中。
temp1=temp1&0x01ff; //保留数值有用部分
if (temp1>0xff) {
flag=1;
temp2=temp1-256;
temp2=~temp2+1;
temp1=temp2;
}
cc=temp1/2.0;//计算出温度值
write_7219(7,cc/10);
write_7219(8,cc%10);
while(1);
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 03:04 , Processed in 0.054372 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表