#1楼主:求助,2510程序中找到问题的地方,但是程序应该没有错误
文章发表于:2008-07-15 12:56
这个是DS18B20的函数,我在51上面编过,现在把它移植到CC2510上面,我从示波器上面看过,延时应该是正确的。就是那个移位有问题。
编译环境是IAR7.20H,成都无线龙提供的
不知道问题出在哪里。经过示波器观测,延时波形都正常,为了找到问题
我在其中加了个data[i]=dat;dati[i]=DQ;datk[i]=dat;
发现以为有问题,得到的移位数据分别是
data[i]=0x80 0x40 0x60 0x70 0xf8 0xfc 0xfe 0xff
datk[i]=0X00 0X40 0X20 0X30 0X78 0X7C 0X7E 0X7F
dati[i]=1 0 0 0 0 0 0 0
上面的数据是温度里面的高8位,从dati[i]可以看出来数据是正常的,而且我给传感器加温度数据会上升。
问题就存在把1位1位的数据存到dat里面。下面是子函数
/*从ds18b20读一个字节 dat为返回值*/
unsigned char DS_ReadByte(void)
{
unsigned char presence;
unsigned char i=0;
unsigned char dat=0;
for (i=0;i<8;i++)
{
dat>>=1; //右移位等待接收一位数据
Delay_short(2); //延时3us
P0DIR=0x02;//输出方式
DQ = 0; //给脉冲信号
Delay_short(3); //延时3us
P0DIR=0x00;//输入方式
Delay_short(10); //延时11us
presence=DQ;
dati[i]=DQ;
datk[i]=dat;
if(presence) //从低位开始接收数据
{
dat|=0x80;
}
else if(presence==0)
{
dat=dat&0x7F;
}
data[i]=dat;
Delay_short(20); //延时21us
Delay_short(20); //等待复位延时21us
P0DIR=0x00;
Delay_short(25); //延时26us
}
return(dat);
}
示波器上面的波形,展开是为了看清楚
(原文件名:TEK0000.JPG) 工程文件,如果哪个大哥方便的话,可以测试哈
点击此处下载
ourdev_348267.rar(文件大小:22K) (原文件名:CC2510温11.rar)
#4
文章发表于:2008-07-15 22:17
楼主帖子里面有代码下载的呀,就是图片下面有个工程文件。
你是说延时么,我是在泰克数字示波器上面上面调试的。
希望EMOT能帮帮忙。我困惑惨了,问了许多人,都说应该没有问题,可是我得到的数据就是没有把温度传感器的数据传进来。我尝试过,直接调试这个函数,一切正常,比如我直接赋值presence=0X35(presence本来应该是端口的电压),运行后dat=0X35。但是我直接运行整个工程的话,它始终会执行
if(presence) //从低位开始接收数据
{
dat|=0x80;
}
而不会执行
else if(presence==0)
{
dat=dat&0x7F;
}
这些问题是今天在函数里面增加几个数组发现的,因为程序中有 dati[i]=DQ这句,所以可以肯定presence不可能全是1
不知道我上面解释清楚没有
#7
文章发表于:2008-07-21 21:40
EMOT,你调试过2510+1820没有呀,哎,困难呀
#8
文章发表于:2008-07-23 09:21
也只是做过51接B20。要不就换个温度传感器吧,SPI总线的那种会比较好用点。