基于1Wire总线的DS18B20测温实验C语言.docx
- 文档编号:20664366
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:18
- 大小:2.14MB
基于1Wire总线的DS18B20测温实验C语言.docx
《基于1Wire总线的DS18B20测温实验C语言.docx》由会员分享,可在线阅读,更多相关《基于1Wire总线的DS18B20测温实验C语言.docx(18页珍藏版)》请在冰豆网上搜索。
基于1Wire总线的DS18B20测温实验C语言
基于1Wire总线的DS18B20测温实验
1wire总线的基本原理:
1Wire总线整体结构与特点:
说明:
☐单总线即只有一根数据线,系统中的数据交换、控制都由这根线完成。
设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线,其内部等效电路如图所示。
☐单总线通常要求外接一个约为4.7kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。
☐主机和从机之间的通信可通过3个步骤完成,分别为初始化1-wire器件、识别1-wire器件和交换数据。
☐由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问1-wire器件都必须严格遵循单总线命令序列,即初始化、ROM命令、功能命令。
单总线芯片序列号:
•单总线器件的基本特点就是每个器件都有一个唯一的采用激光刻制的序列号,当有许多单总线器件连接在同一总线时,系统主机可以通过器件的序列号进行器件识别.
•序列号
信号方式
☐所有的单总线器件都要遵循严格的通信协议,以保证数据的完整性。
1-wire协议定义了复位脉冲、应答脉冲、写0、写1、读0和读1时序等几种信号类型。
☐所有的单总线命令序列(初始化,ROM命令,功能命令)都是由这些基本的信号类型组成的。
在这些信号中,除了应答脉冲外,其它均由主机发出同步信号,并且发送的所有命令和数据都是字节的低位在前。
信号时序设计原理
信号时序设计原理说明
⏹总线主机启动和控制所有1-Wire通信。
⏹1-Wire通信波形与脉宽调制类似,因为在数据位传输期间(或时隙(Timeslot))是通过宽脉冲(逻辑0)和窄脉冲(逻辑1)发送数据的。
⏹当总线主机发出一个预定宽度的“复位”脉冲时,启动通信过程,并通过该脉冲同步整个总线系统。
所有从机都会以一个逻辑低“应答”脉冲来响应复位脉冲。
(初始化)
⏹写数据时,主机首先拉低1-Wire总线以启动一个时隙,然后保持总线为低(宽脉冲)来发送逻辑0,或释放总线(窄脉冲)使总线返回逻辑1状态。
(写周期)
⏹读数据时,主机以窄脉冲方式拉低总线,重新启动一个时隙。
然后从机可以通过导通开漏极输出并保持线路为低来延长该脉冲,从而返回逻辑0;或保持开漏极的关闭状态以允许总线恢复,从而返回逻辑1。
(读周期)
⏹大多数1-Wire器件都支持两种数据速率:
15kbps标准速率和111kbps高速速率。
初始化信号
✓初始化时序,初始化时序包括主机发出的复位脉冲和从机发出的应答脉冲。
主机通过拉低单总线至少480μs产生Tx复位脉冲;然后由主机释放总线,并进入Rx接收模式。
✓主机释放总线时,会产生一由低电平跳变为高电平的上升沿,单总线器件检测到该上升沿后,延时15~60μs,接着单总线器件通过拉低总线60~240μsμ来产生应答脉冲。
主机接收到从机的以应答脉冲后,说明有单总线器件在线,然后主机就可以开始对从机进行ROM命令和功能命令操作。
初始化时序图
写时序:
读时序:
命令序列
典型的单总线命令序列如下:
第一步:
初始化
第二步:
ROM命令(跟随需要交换的数据)
第三步:
功能命令(跟随需要交换的数据)
每次访问单总线器件必须严格遵守这个命令序列,如果出现序列混乱,则单总线器件不会响应主机。
但是这个准则对于搜索ROM命令和报警搜索命令例外。
在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。
ROM命令:
一、实验目的
1熟悉DS18B20的芯片功能。
2掌握采用单片机和DS18B20的硬件接口技术。
3掌握DS18B20的读写程序的设计和调试方法。
二、实验要求
测量温度并将温度显示。
三、芯片资料
1.1-wire单总线是Maxim全资子公司Dallas的一项专有技术。
与目前多数标准串行
数讯信方式,如SPI/I2C/MICROWIRE不同,它采用单根信号线,既传输时钟,又传输数据,
而且数据传输是双向的。
它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展
和维护等诸多优点。
本实验使用DS18B20芯片。
2.DS18B20的引脚介绍
DS18B20特性:
程序:
#include
#include
#defineucharunsignedchar
#definejump_ROM0xCC
#definestart0x44
#definereaddata0xBE
sbitdq=P3^4;
voiddelay(intuseconds)
{ints;
for(s=0;s } ucharresetds(void) { ucharpresencesignal; dq=0; delay(30); dq=1; delay(3); presencesignal=dq; delay(30); returnpresencesignal; } voidwritebit(charval) {dq=0; if(val==1) dq=1; else dq=0; delay(5); dq=1; } voidwritebyte(charval) { uchari; uchartemp; for(i=0;i<8;i++) { temp=val>>i; temp&=0x01; writebit(temp); } delay(5); } ucharreadbit(void) { uchari; dq=0; dq=1; for(i=0;i<3;i++) returndq; } ucharreadbyte(void) { uchari; ucharvalue=0; for(i=0;i<8;i++) { if(readbit()) value|=0x01< delay(7); } return(value); } voidmain() { ucharget[9]; uchark,lsb,msb,n,temp; intj,m,i; floatt; uchartemperature[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; P1=0x0ff; while (1) { m=0; resetds(); writebyte(jump_ROM); writebyte(start); delay(5); resetds(); writebyte(jump_ROM); writebyte(readdata); for(k=0;k<9;k++) { get[k]=readbyte(); } msb=get[1]; lsb=get[0]; if((msb&0x80)! =0) { m=1; msb=~msb; lsb=(~lsb)+1; if(lsb==0) {msb++;} } n=lsb; msb=msb<<4; lsb=lsb>>4; temp=msb|lsb; n=n&0x0f; t=(float)(n); t=t*0.0625; j=(int)(t*10); for(i=0;i<90;i++) { if(m==1) {P2=0x40;} if(m==0) {P2=0x00;} P1=0xfe; delay(30); P2=temperature[j]; P1=0xf7; delay(30); P2=temperature[temp%10]+0x80; P1=0xfb; delay(30); P2=temperature[(temp%100)/10]; P1=0xfd; delay(30); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Wire 总线 DS18B20 测温 实验 语言