ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:102.69KB ,
资源ID:17185552      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17185552.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(带有存储器功能的数字温度计DS1624技术应用Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

带有存储器功能的数字温度计DS1624技术应用Word文档格式.docx

1、如果计数周期结束之前计数器达到0,已预置了此初值的温度寄存器中的数字就会增加,从而表明温度高于55。与此同时,计数器斜坡累加电路被重新预置一个值,然后计数器重新对时钟计数,直到计数值为0。通过改变增加的每1内的计数器的计数,斜坡累加电路可以补偿振荡器的非线性误差,以提高精度,任意温度下计数器的值和每一斜坡累加电路的值对应的计数次数须为已知。DS1624通过这些计算可以得到0.03125的精度,温度输出为13位,在发出读温度值请求后还会输出两位补偿值。表2给出了所测的温度和输出数据的关系。这些数据可通过2线制串行口连续输出,MSB在前,LSB在后。表2温度与输出数据关系表 温度数字量输出(二进制

2、)数字量输出(十六进制)1250111,1101,0000,00007D00H25.06250001,1001,0001,00001910H0.50000,0000,1000,00000080H00000,0000,0000,00000000H-0.51111,1111,1000,0000FF80H-25.06251110,0110,1111,0000E6F0H-551100,1001,0000,0000C900H由于数据在总线上传输时MSB在前,所以DS1624读出的数据可以是一个字节(分辨率为1),也可以是两个字节,第二个字节包含的最低位为0.03125。表2是13位温度寄存器中存储温度值

3、的数据格式高八位字节低八位字节SB14B13B12B11B10B9B8B7B6B5B4B3表3温度值的数据存储格式 其中 S为符号位,当S0时,表示当前的测量的温度为正的温度;当S1时,表示当前的测量的温度为负的温度。B14B3为当前测量的温度值。最低三位被设置为0。DS1624工作方式 DS1621的工作方式是由片上的配置/状态寄存器来决定的,如表4,该寄存器的定义如下:表4配置/状态寄存器格式 DONE11SHOT其中DONE为转换完成位,温度转换结束时置1,正在进行转换时为0;1SHOT为温度转换模式选择。1SHOT为1时为单次转换模式,DS1624在收到启动温度转换命令EEH后进行一次

4、温度转换。1SHOT为0时为连续转换模式,此时DS1624将连续进行温度转换,并将最近一次的结果保存在温度寄存器中。该位为非易失性的。片内256字节存储器操作 控制器对DS1624的存储器编程有两种模式:一种是字节编程模式,另一种是页编程模式。在字节编程模式中,主控制器发送地址和一个字节的数据到DS1624。在主器件发出开始(START)信号以后,主器件发送写控制字节即1001A2A1A00(其中R/W控制位为低电平“0”)。指示从接收器被寻址,DS1624接收后应答,再由主器件发送访问存储器指令(17H)后,DS1624接收后应答,接着由主器件发送的下一个字节字地址将被写入到DS1624的地

5、址指针。主器件接收到来自DS1624的另一个确认信号以后,发送数据字节,并写入到寻址的存储地址。DS1624再次发出确认信号,同时主器件产生停止条件STOP,启动内部写周期。在内部写周期DS1624将不产生确认信号。在页编程模式中,如同字节写方式,先将控制字节、访问存储器指令(17H)、字地址发送到DS1624,接着发N个数据字节,其中以8个字节为一个页面。主器件发送不多于一个页面字节的数据字节到DS1624,这些数据字节暂存在片内页面缓存器中,在主器件发送停止信号以后写入到存储器。接收每一个字节以后,低位顺序地址指针在内部加1。高位顺序字地址保持为常数。如果主器件在产生停止条件以前要发送多于

6、一页字的数据,地址计数器将会循环,并且先接收到的数据将被覆盖。像字节写操作一样,一旦停止条件被接收到,则内部写周期将开始。存储器的读操作 在这种模式下,主器件可以从DS1624的EEPROM中读取数据。主器件在发送开始信号之后,主器件首先发送写控制字节1001A2A1A00,主器件接收到DS1624应答之后,发送访问存储器的指令(17H),收到DS1624的应答之后,接着发送字地址将被被写入到DS1624的地址指针。这时DS1624发送应答信号之后,主器件并没有发送停止信号,而是重新发送START开始信号,接着又发送读控制字节1001A2A1A01,主器件接收到DS1624应答之后,开始接收D

7、S1624送出来的数据,主器件每接收完一个字节的数据之后,都要发送一个应答信号给DS1624,直到主器件发送一个非应答信号或停止条件来结束DS1624的数据发送过程。DS1624的指令集 数据和控制信息的写入读出是以表5和表6所示的方式进行的。在写入信息时,主器件输出从器件(即DS1624)的地址,同时R/W位置0。接收到响应位后,总线上的主器件发出一个命令地址,DS1624接收此地址后,产生响应位,主器件就向它发送数据。如果要对它进行读操作,主器件除了发出命令地址外,还要产生一个重复的启动条件和命令字节,此时R/W位为1,读操作开始。下面对它们的命令进行说明。访问存储器指令17H:该指令是对

8、DS1624的EEPROM进行访问,发送该指令之后,下一个字节就是被访问存储器的字地址数据。访问设置寄存器指令ACH:如果R/W位置0,将写入数据到设置寄存器。发出请求后,接下来的一个字节被写入。 如果R/W位置1,将读出存在寄存器中的值。读温度值指令AAH:即读出最后一个测温结果。DS1624产生两个字节,即为寄存器内的结果。开始测温指令EEH:此命令将开始一次温度的测量,不需再输入数据。在单次测量模式下,可在进行转换的同时使DS1624保持闲置状态。在连续模式下,将启动连续测温。停止测温指令22H:该命令将停止温度的测量,不需再输入数据。此命令可用来停止连续测温模式。发出请求后,当前温度测

9、量结束,然后DS1624保持闲置状态。直到下一个开始测温的请求发出才继续进行连续测量。表5主机对DS1624写操作通信格式 I2C通信开始主器件发送控制字节(DS1624地址和写操作)DS1624应答主器件发送访问DS1624的指令主器件发送的数据字节I2C通信停止表6主机对DS1624读操作通信格式 主器件发送控制字节(DS1624地址和读操作)数据字节0主机应答数据字节1主机非应答2 实验任务 用一片DS1624完成本地数字温度的测量,并通过8位数码管显示出测量的温度值。其硬件电路图如图4.34.4所示3 电路原理图 图4.34.44 系统板上硬件连线 把“单片机系统”区域中的P0.0P0

10、.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。 把“单片机系统”区域中的P2.0P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。 把DS1624芯片插入到“二线总线模块”区域中的8脚集成座上,注意芯片不插反。(4) 把“二线总线模块”区域中的PIN1 PIN2分别用导线连接到“单片机系统”区域中的P1.6和P1.7端子上。(5) 把“二线总线模块”区域中的PIN4 PIN5PIN6分别用导线连接到“电源模块”区域中的GND端子上。5 程序设计内容 由于DS1624是I2C总线结构的串行数据传送,它只需要SDA和SCL两根线完成数据的

11、传送过程。因此,我们在进行程序设计的时候,也得按着I2C协议来对DS1624芯片数据访问。有关I2C协议参看有关资料,这里不详述。对于AT89S51单片机本身没有I2C硬件资源,所以必须用软件来模拟I2C协议过程。 要从DS1624中读取温度值,首先启动DS1624的内部温度A/D开始转换,对应着有相应的命令用来启动开始温度转换,有关DS1624的指令集参考前面的叙述。一般情况下,DS1624经过一次温度的变换,需要经过1秒钟左右的时间,所以等待1秒钟后,即可读取内部的温度值,对于读取的温度值,仍然通过DS1624的指令集来完成温度的读取。但所有有数据的传送过程必须遵循I2C协议。6 C语言源

12、程序 #include INTRINS.H /c51中的intrins.h库函数.txtunsigned char code displaybit=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;unsigned char code displaycode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00;unsigned char code dotcode32=0,3,6,9,12,16,19,22, 25,28,31,34,38,4

13、1,44,48, 50,53,56,59,63,66,69,72, 75,78,81,84,88,91,94,97;sbit SDA=P16;sbit SCL=P17;unsigned char displaybuffer8=0,1,2,3,4,5,6,7;unsigned char eepromdata8;unsigned char temperdata2;unsigned char timecount;unsigned char displaycount;bit secondflag=0;unsigned char secondcount=0;unsigned char retn;unsi

14、gned int result;unsigned char x;unsigned int k;unsigned int ks;void delay(void);void delay10ms(void);void i_start(void);void i_stop(void);void i_init(void);void i_ack(void);bit i_clock(void);bit i_send(unsigned char i_data);unsigned char i_receive(void);bit start_temperature_T(void);bit read_tempera

15、ture_T(unsigned char *p);void delay(void) _nop_(); void delay10ms(void) unsigned int i; for(i=0;i1000;i+) delay(); void i_start(void) SCL=1; SDA=0; SCL=0;void i_stop(void) SDA=1;void i_init(void) i_stop();void i_ack(void) i_clock();bit i_clock(void) bit sample; sample=SDA; return(sample);bit i_send(

16、unsigned char i_data) unsigned char i;8; SDA=(bit)(i_data & 0x80); i_data=i_data1; return(i_clock();unsigned char i_receive(void) unsigned char i_data=0; i_data*=2; if(i_clock() i_data+; return(i_data);bit start_temperature_T(void) i_start(); if(i_send(0x90) if(i_send(0xee) return(1); else return(0)

17、;bit read_temperature_T(unsigned char *p) if(i_send(0xaa) if(i_send(0x91) *(p+1)=i_receive(); i_ack(); *p=i_receive();void main(void) P1=0xff; timecount=0; displaycount=0; TMOD=0x21; TH1=0x06; TL1=0x06; TR1=1; ET1=1; ET0=1; EA=1; if(start_temperature_T() /向DS1624发送启动A/D温度转换命令,成功则启动T0定时1s。 secondflag

18、=0; secondcount=0; TH0=55536/256; TL0=55536%256; TR0=1; while(1) if(secondflag=1) TR0=0; if(read_temperature_T(temperdata) /T0定时1s时间到,读取DS1624的温度值 for(x=0;x3; displaybuffer0=(dotcoderesult)%10; displaybuffer1=(dotcoderesult)/10; if(start_temperature_T() /温度值数据处理完毕,重新启动DS1624开始温度转换 void t0(void) inte

19、rrupt 1 using 0 /T0用于定时1s时间到 secondcount+; if(secondcount=100) secondflag=1;void t1(void) interrupt 3 using 0 /T1定时1ms用数码管的动态刷新 timecount+; if(timecount=4) /T1定时1ms到 P2=0xff; if (displaycount=5) P0=(displaycodedisplaybuffer7-displaycount | 0x80); /在该位同时还要显示小数点 P0=displaycodedisplaybuffer7-displaycount; P2=displaybitdisplaycount; displaycount+; if(displaycount=8)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1