DS18B20的工作原理及应用

PORTA&=~BIT(DQ); //拉低总线,启动输入 PORTA|=BIT(DQ); //释放总线

DDRA&=~BIT(DQ); //DQ 为输入状态 if(PINA&BIT(DQ)) Temp|=0x80;

Delay_1us(45); //延迟45 微妙(最大45 微妙) }

return Temp; }

//读温度函数

unsigned int Read_Temperature() {

unsigned int Temp1,Temp2;

DS1302_Reset(); //DS1302 复位 DS1302_Write(0xCC); //跳过ROM DS1302_Write(0x44); //温度转换 DS1302_Reset(); //DS1302 复位 DS1302_Write(0xCC); //跳过ROM DS1302_Write(0xbe); //读取RAM

Temp1=DS1302_Read(); //读低八位,LS Byte, RAM0 Temp2=DS1302_Read(); //读高八位,MS Byte, RAM1 DS1302_Reset(); //DS1302 复位,表示读取结束

return (((Temp2<<8)|Temp1)*6.25); //0.0625=xx, 0.625=xx.x, 6.25=xx.xx }

void main() {

unsigned int Temp;

LED7_Init(); //初始化数码管引脚 while(1) {

Temp=Read_Temperature(); //调用读取温度函数 Number_Show(Temp); //显示温度 Delay_1us(100); //稍微延迟 } }

AVR单片机与DS18B20多点温度 获取序列号(64位ROM代码)

操作单总线数字温度传感器必须严格按规定的协议操作,即应按以下顺序操作: 初始化、ROM操作命令、暂存存储器操作命令、数据传输。在ROM操作命

令中,有两条命令专门用于获取传感器序列号: 读ROM命令( 33H)和搜索ROM命令( F0H) 。读ROM命令只能在总线上仅有一个传感器的情况下使用。搜索ROM命令则允许总线主机使用一种“消去”处理方法来识别总线上所有的传感器序列号。为了建立64位ROM代码和测量位置点传感器之间的关系,我们选

21

用读ROM命令(33H) 。DS18B20的64位ROM代码结构如图2所示:8位CRC代码48位序列号8位产品类型号

执行如下程序即可读取DS18B20的64位ROM代码并按编号存入其内部的E2 PROM中,从而建立测量位置点和传感器64位ROM代码之间的关系表。64位序列号用8个字节单元来存储,位置号为n的DS18B20,其64位序列号在E2 PROM中从( n - 1) ×8开始的单元存放。

由于已经在上面获取了多个DS18B20的ROM代码并在AVR 单片机内部的E2 PROM中建立了测量位置点和传感器64位ROM代码之间的关系表,因此对多个温度的巡回 测量的步骤如下:

(1) 发跳过ROM命令CCH。

(2) 发启动所有在线的DS18B20进行温度转换命令44H。 (3) 延迟1 s。

(4) 发匹配ROM命令55H。

(5) 按照E2 PROM中建立的关系表的顺序取出64位ROM代码发送到单总线。 (6) 发读温度值命令BEH,读取温度值。

(7) 进行CRC校验和数据处理后送LCD显示器显示。

(8) 重复第4步到第7步,直到所有的DS18B20测量处理完。 (9) 再重复第1步到第8步,进行下一轮的巡回测量。

第4章 系统软件设计

4.2 测温模块流程图

>>闂傚倸鍊搁崐宄懊归崶顒夋晪鐟滃繘骞戦姀銈呯婵°倐鍋撶痪鎯ь煼閺岋綁骞囬锝嗏挅濠电偛妯婃禍婊堝礃閳ь剙顪冮妶鍡楀Ё缂傚秴妫楀玻鍧楁偄閸忓皷鎷虹紒缁㈠幖閹冲繗銇愯缁辨帡鎮╅崘鑼患缂備緡鍠栭悧鎾崇暦閹烘鍊烽悗鐢登圭敮鎯р攽閻樺灚鏆╁┑顔碱嚟閹广垹螣娓氼垳鈧埖銇勯弴妤€浜鹃梺鍝勭焿缁查箖骞嗛弮鍫晬婵炴垶锕╂导锟�<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4