微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM9的18B20温度传感器程序

基于ARM9的18B20温度传感器程序

时间:11-24 来源:互联网 点击:
18B20温度传感器,典型的时序操作器件,用51单片机写很方便,可是把这现成的程序移植到FPGA、ARM、430上面,还需要一定的翻译功底。

//-------------------------------------------------------------------------------------
//函数名称:dmsec //入口参数:count //函数功能:延时子程序
//-------------------------------------------------------------------------------------
void dmsec(uint count) { uchar i;
while(count--) {
for(i=0;
i<125;
i++);
}
}
//-------------------------------------------------------------------------------------
//函数名称:tmreset //入口参数:无 //函数功能:
//-------------------------------------------------------------------------------------
void tmreset(void) {
ushort i;
dq=0;
i=343;
while(i>0) i--;
//大约900us dq=1;
i=13;
while(i>0) i--;
} //-------------------------------------------------------------------------------------
//函数名称:tmpre //入口参数:无 //函数功能:等待DS18B20应答
//-------------------------------------------------------------------------------------
void tmpre(void) {
uchar i;
while(dq);
while(~dq);
i=13;
while(i>0) i--;
} //-------------------------------------------------------------------------------------
//函数名称:tmrbit //入口参数:无 //返回值: dat //函数功能:在总线上读一位
//-------------------------------------------------------------------------------------
bit tmrbit(void) {
uchar i;
bit dat;
dq=0;
i++;
dq=1;
i++;
i++;
dat=dq;
i=30;
while(i>0) i--;
return(dat);
} //-------------------------------------------------------------------------------------
//函数名称:tmrbyte //入口参数:无 //返回值: dat //函数功能:读一个字节
//-------------------------------------------------------------------------------------
uchar tmrbyte(void) {
uchar i,j,dat=0;
for(i=1;i<=8;i++) {
j=tmrbit();
dat=(j<7)|(dat>>1);
}
return(dat);
} //-------------------------------------------------------------------------------------
//函数名称:tmwbyte //入口参数:dat //函数功能:写命令
//-------------------------------------------------------------------------------------
void tmwbyte(uchar dat) {
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++) {
testb=dat&0x01;
dat=dat>>1;
if(testb) {
dq=0;
//写1 i++;
i++;
dq=1;
i=27;
while(i>0) i--;
}
else {
dq=0;
//写0 i=27;
while(i>0) i--;
dq=1;
i++;
i++;
}
}
} //-------------------------------------------------------------------------------------
//函数名称:tmrbyte //入口参数:无 //函数功能:读取温度值
//-------------------------------------------------------------------------------------
void read_tr() {
uchar a,b;
ushort y;
tmreset();
tmpre();
dmsec(1);
tmwbyte(0xcc);
tmwbyte(0x44);
dmsec(100);
tmreset();
tmpre();
dmsec(1);
tmwbyte(0xcc);
tmwbyte(0xbe);
a=tmrbyte();
//l b=tmrbyte();
//h y=b&0x0f;
y=y<8;
y=a|y;
if(y>0x800) {
y=0x1000-y;
bjTr=cal12bit(y);
bjTr=bjTr+0x8000;
}
else
{
bjTr=cal12bit(y);
}
} //12位精度
void temp_init(void) {
tmreset();
tmpre();
tmwbyte(0xcc);
tmwbyte(0x4e);
tmwbyte(0x88);
tmwbyte(0x44);
tmwbyte(0x7f);
tmreset();
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top