总线上可以挂多少个ds18b20,一条总线最多能挂多少个DS18B20
来源:整理 编辑:亚灵电子网 2024-03-05 19:59:10
本文目录一览
1,一条总线最多能挂多少个DS18B20
单总线是8个,超过8个就要解决微处理器的总线驱动问题
2,ds18b20外部供电方式下单总线上可以挂接多少个
理论上可以挂很多,但实际应用时挂多后很占系统资源,影响系统实时性.
3,一个单片机IO口最多能驱动多少个DS18B20
与温度传感器的功耗有关,也与线路距离长短有关,一般情况下一两百个肯定没有问题。您也可参考申矽凌微电子的CT1820。其读取速度要快20多倍。理论N个,所有的DS18B20就挂上,搜索ROM序列号
4,一个51单片机的IO口能同时挂多少个DS18B20
在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个 DS18B20,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。
5,51单片机能不能驱动多个DS18b20
请看此贴:本人项目用18B20测温带shell程序http://www.amobbs.com/thread-5495639-1-1.html可以的,我觉得应该是距离越长,所能驱动的18b20个数就越少,但实际上多少个,我也不清楚其实用不同IO来驱动不同的18B20,可以得到相当不错的效果……用单io速度回比较慢(读取ID的过程)
6,一个51单片机的IO口能同时挂多少个DS18B20
由于现在51内核的单片机型号太多,每个系列的IO口驱动能力都不尽相同,因此这个问题实在无法给出确切的数字。但是,如果不考虑单片机的IO驱动能力,则只需要考虑DS18B20的驱动能力。这个只需要根据你的上拉就知道了。在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个 DS18B20,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。外部IO具体能挂多少DS18B20(或外设)要看这个IO的拉电流与灌电流的承载大小,现在采用51为内核的芯片比较的多,各家的驱动能力也不相同,需要看你选芯片厂商的数据手册,就以AT的51来说,其有4个8位的io端口,每个端口驱动能力都不相同,你首先要确定是用个端口做IO。
7,能给我发个单总线多个ds18b20单片机c程序吗谢谢
/***********ds18b20子程序*************************/ /***********ds18b20延迟子函数(晶振12MHz)*******/ #includesbitDQ=P1^2; #defineucharunsignedchar voiddelay_18B20(unsignedinti) { while(i--); } /***驱动程序:#include"reg52.h"sbit dq=p1^4;unsigned char temph,templ;void delay(unsigned int i)//延时函数 while(i--);}void init_ds18b20(void)unsigned char x=0;ea=0;dq = 1; //dq复位 delay(8); //稍做延时 dq = 0; //单片机将dq拉低 delay(80); //精确延时 大于 480us dq = 1; //拉高总线 delay(10); x=dq; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5); ea=1;}unsigned char readonechar(void)unsigned char i=0;unsigned char dat = 0;ea=0;for (i=8;i>0;i--) dq = 0; // 给脉冲信号 dat>>=1; dq = 1; // 给脉冲信号 if(dq) dat|=0x80; delay(5); } return(dat); ea=1;}void writeonechar(unsigned char dat) unsigned char i=0; ea=0; for (i=8; i>0; i--) dq = 0; dq = dat&0x01; delay(5); dq = 1; dat>>=1; }delay(5);ea=1;}void readtemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;init_ds18b20();writeonechar(0xcc); // 跳过读序号列号的操作writeonechar(0x44); // 启动温度转换delay(200);init_ds18b20();writeonechar(0xcc); //跳过读序号列号的操作 writeonechar(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度templ=readonechar(); //低位temph=readonechar(); //高位init_ds18b20();writeonechar(0xcc); // 跳过读序号列号的操作writeonechar(0x44); // 启动温度转换}主程序;main()unsigned char temp,a;inittimer0();while(1) readtemperature(); if(temph>128) temph=~temph; // 取反加1 templ=~templ+1;} else temp=((templ&0xf0)>>4)|((temph&0x0f)<<4); a=temp/100; if(a==0) str[1]=dis_dm[a]; //百位温度 str[2]=dis_dm[(temp%100)/10]; //十位温度 str[3]=dis_dm[(temp%100)%10]&0x7f; //个位温度,带小数点 str[4]=dis_dm[(templ&0x0f)*6/10]; //十分位 str[5]=dis_dm[10]; //c } 你主要是需要驱动程序,主程序你可以按照自己的需求写!
文章TAG:
总线上可以挂多少个ds18b20总线 线上 可以