请教关于DS1620的C语言驱动的问题:请教关于DS1620的温度算法问题
各位大侠好:
小弟单片机学的不怎么样了,现在在做了一个关于DS1620温度传感器方面的毕业设计。还没有做实物,现在在软件仿真的时候,出现了问题。就是温度读出来,显示不对,只是一个静态的值,调节也不变,搞了一段时间了,没有找到原因。我想是不是自己的程序出了问题,故向各位大侠求救!下面是一些程序,数码管用MAX7219驱动。小弟的邮箱是andy_1985923@163.com
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);
}
本文来自: 电子工程师之家http://www.eehome.cn
[ 此贴被czypf在2009-05-24 11:50重新编辑 ]