|
发表于 2012-4-16 15:40:32
|
显示全部楼层
这是使用方法
没有的部分你自己过滤吧,
我这个程序是可以选择多个IO口的,SElect定义的,你不要理它,具体的DS18b20读写,你应该知道的
void scan1820(unsigned char select)
{bit rslt;
idata unsigned char i,cnt;
float idata ls;
unsigned int idata lsi;
cnt = 0;
LastDiscrepancy = 0;
LastDeviceFlag = FALSE;
rslt=OWSearch(select);
PTT=0;
while (rslt)
{
cnt++;
putbyte('0');
putbyte('x');
puthex(select);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[0]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[1]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[2]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[3]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[4]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[5]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[6]);
putbyte(',');
putbyte('0');
putbyte('x');
puthex(temp_buff[7]);
putbyte(',');
putbyte('/');
putbyte('/');
putbyte(' ');
putbyte('=');
putbyte(' ');
DOG=~DOG;
ls=0;
if (temp_buff[0]==0x28) //DS18B20
{OWInit (select);
OWWriteByte(0xcc,select); //skip rom
OWWriteByte(0x44,select); //Temperature convert
ls=gettemp(select);
}
if (temp_buff[0]==0xA6) //DS2438
{inid=0;
OWInit (select);
OWWriteByte(0xcc,select); //skip rom
OWWriteByte(0x4E,select);
OWWriteByte(0x00,select);
OWWriteByte(0x00,select);
OWInit (select);
OWWriteByte(0xcc,select); //skip rom
OWWriteByte(0x48,select);
OWWriteByte(0x00,select);
delay(250);
OWInit (select);
OWWriteByte(0xcc,select); //skip rom
OWWriteByte(0xB4,select); //Temperature convert
ls=getvol(select);
}
ls*=10;
lsi=ls;
putint(lsi);
putbyte(' ');
putbyte(':');
putbyte(' ');
putint(inid/256);
putbyte(' ');
putint(inid & 0xFF);
putbyte(' ');
putint(cnt);
putbyte(0x0d);
putbyte(0x0a);
rslt = OWSearch(select);
}
PTT=1;
} |
|