温度采集系统课程设计报告(共19页)_第1页
温度采集系统课程设计报告(共19页)_第2页
温度采集系统课程设计报告(共19页)_第3页
温度采集系统课程设计报告(共19页)_第4页
温度采集系统课程设计报告(共19页)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上1、设计目的 1)查资料了解8255A和ADC0809AD转换器的工作原理 2)原理图设计,用PROTEL画出原理图 3)软件设计,给出流程图及源代码并加注释2、所用设备1)8088CPU2)DS18B20温度传感器3)A/D570转换器4)8255A可编程并行接口5)3片LED显示6)74LS138译码器3、设计内容及步骤以8088 CPU 为核心设计一个温度采集系统,系统可以实现一路温度的采集,在3位LED显示器上显示当前温度。本设计所用器件主要有传感器,A/D转换器,8088CPU,可编程并行接口8255,LED显示器等。首先传感器把所测的温度转换为电压,输入A

2、/D转换器中进行转换,然后再把得到的二进制数经过CPU在LED上显示出来系统总体方案按照设计要求我们把传感器选择DS18B20,A/D转换采用AD570,把温度传感器采集过来的电压信号直接传给A/D 转换器,然后通过8路数据接入8255可编程芯片,经微处理器8088处理后输出,通过LED显示当前采集的温度值。图-1 系统框图4、程序设计(各个软件模块设计和流程图)4.1温度采集DS18B20的读数据流程图图-2 温度采集DS18B20的读数据流程图4.2 处理温度BCD码流程图图-3 处理温度BCD码流程图4.3 显示数据刷新流程图图-4 显示数据刷新流程图4.4系统总的流程图图-5系统总的流

3、程图4.5系统总程序TEMPER_L DATA 36H ;温度寄存器的低位 TEMPER_H DATA 35H ;温度寄存器的高位 TEMPER_NUM DATA 60H ;保存温度值 FLAG BIT 00H ;器件是否存在的标志位,器件存在由软件置1,否则清0 DQ BIT P1.0 ORG 0000H AJMP START ;*; /*主程序*/ * ;* ; ORG 0030H START: MOV SP,#70H CALL GET_TEMPER ;读取温度值 CALL TEMPER_COV ;读取转换后的温度值 MOV R0,A CALL DISP CALL DELAY AJMP S

4、TART ;* /*查询方式取得AD转换结果子程序*/ * ;* READAD:MOV AL,92H ;方式字,端口AB为输入方式,C为输出方式OUT PORTCT,AL ;PORTCT为控制端口地址,设方式字MOV AL,01OUT PORTC ,AL ;使PC0为1,PORTC为C端口地址MOV AL,00OUT PORTC,AL ;使PC0为0,启动AD转换W: IN AL,PORTB ;读取端口B中的状态 RCR AL,01 ;如PB0为1,则再查询 JC WMOV AL,01OUT PORTC,AL ;使PC0为1,撤销启动信号IN AL,PORTA ;读取转换数据 ;* ; /*取

5、得温度子程序*/ * ;* ; GET_TEMPER: SETB DQ CALL CHECK ; MOV A,#0CCH ; 跳过ROM匹配(当总线上只有一个器件时可跳过读ROM命令) CALL DSWRITE ; 写入命令 MOV A,#44H ; 发出温度转换命令 CALL DSWRITE NOP CALL DELAY CALL DELAY CALL CHECK MOV A,#0CCH ; 跳过ROM匹配 CALL DSWRITE MOV A,#0BEH ; 发出读温度命令 CALL DSWRITE CALL DSREAD ;读取温度的低位 MOV R0,#TEMPER_L MOV R0,

6、A ;存入TEMPER_L CALL DSREAD ;读取温度的低位 DEC R0 ;存入TEMPER_H MOV R0,A RET ; ;* ; /*读DS18B20的程序,从DS18B20中读出一个字节的数据*/ * ;* ; DSREAD: MOV R2,#8 READ1: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#01 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,READ1 RET ; ;* ; /*写DS18B20子程序*/    

7、; * ;* ; DSWRITE: MOV R2,#8 CLR C WRITE1: CLR DQ MOV R3,#6 ;延时12US DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 ;46US DJNZ R3,$ SETB DQ NOP DJNZ R2,WRITE1 SETB DQ RET ; ;*; /*温度转换程序*/ * ;*; TEMPER_COV: MOV A,#0F0H ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值 SWAP A MOV TEMPER_NUM,A MOV A,TEMPER_L JNB ACC.3,TEMPER_COV

8、1 ; 四舍五入去温度值, INC TEMPER_NUM ;D3为1则加1,为0则舍去 TEMPER_COV1: MOV A,TEMPER_H ; 高位 ANL A,#07H ;温度寄存器的高字节只有后3位有效 SWAP A ORL A,TEMPER_NUM ; 拼装 MOV TEMPER_NUM,A ; 保存变换后的温度数据 CALL BIN_BCD RET ; ;* ; /*检查器件是否存在子程序*/ * ;* ; CHECK: CALL DSINIT ; 初始化 JB FLAG,CHECK1 ; 检查标志位判断器件是否存在 AJMP CHECK ; 若DS18B20不存在则继续检测 CH

9、ECK1: CALL DELAY1 RET ; ;*; /*BCD码转换子程序*/ * ;* ; BIN_BCD: MOV DPTR,#TEMP_TAB MOV A,TEMPER_NUM MOVC A,A+DPTR MOV TEMPER_NUM,A RET ; ;* ; /*初始化子程序程序*/ ;初始化时序是由总线发出一个复位信号,然后由器件发 * ;出一个应答信号,表示该器件存在,并准备好开始工作 ;* * ; DSINIT: SETB DQ NOP CLR DQ ;总线发一个复位信号 MOV R0,#80H DJNZ R0,$ ; 延时 SETB DQ ;拉高总线准备检测 MOV R0,

10、#25H ;延时 DJNZ R0,$ JNB DQ,INIT2 ;检测是否有应答信号,有应答信号跳转 AJMP INIT3 ; 延时 INIT2: SETB FLAG ; 置标志位,表示DS1820存在 AJMP INIT4 INIT3: CLR FLAG ; 清标志位,表示DS1820不存在 AJMP INIT5 INIT4: MOV R0,#6BH DJNZ R0,$ ; 延时 INIT5: SETB DQ ;拉高总线 RET ; ;* ; /*配置程序*/ * ;*; RE_CONFIG: JB FLAG,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1 RET R

11、E_CONFIG1: MOV A,#0CCH ; 发SKIP ROM命令 CALL DSWRITE MOV A,#4EH ; 发写暂存存储器命令 CALL DSWRITE MOV A,#00H ; TH(报警上限)中写入00H CALL DSWRITE MOV A,#00H ; TL(报警下限)中写入00H CALL DSWRITE MOV A,#7FH ; 选择12位温度分辨率 CALL DSWRITE RET ; ;* ; /*显示子程序*/ * ;* DISP: MOV A,R0 ;转换结果低位 ANL A,#0FH ACALL DSEND ;显示 MOV A,R0 SWAP A ANL

12、 A,#0FH ;转换结果高位 ACALL DSEND ;显示 RET DSEND: MOV DPTR,#SGTB1 MOVC A,A+DPTR ;取字符 MOV SBUF,A JNB TI,$ CLR TI RET ; ;* ; /*延时程序*/ * ;* ; DELAY: MOV R7,#00H DELAY0: MOV R6,#00H DJNZ R6,$ DJNZ R7,DELAY0 RET DELAY1: MOV R7,#20H DJNZ R7,$ RET ; ;* ; /*字符编码*/ * ;* ; SGTB1:  DB   03H  ;0  

13、DB   9FH    ;1   DB   25H    ;2   DB   0DH    ;3  DB   99H    4 DB   49H    ;5 DB 41H   6   DB   1FH    ;7   DB   01H    ;8   DB   09H  

14、0; ;9   DB   11H    ;A   DB   0C1H  ;B   DB   63H    ;C   DB   85H    ;D   DB   61H    ;E   DB   71H    F   DB   00H TEMP_TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,0

15、9H,10H,11H,12H,13H,14H,15H DB 16H,17H,18H,19H,20H,21H,22H,23H DB 24H,25H,26H,27H,28H,29H,30H,31H DB 32H,33H,34H,35H,36H,37H,38H,39H DB 40H,41H,42H,43H,44H,45H,46H,47H DB 48H,49H,50H,51H,52H,53H,54H,55H DB 56H,57H,58H,59H,60H,61H,62H,63H DB 64H,65H,66H,67H,68H,69H,70H,71H DB 72H,73H,74H,75H,76H,77H,7

16、8H,79H DB 80H,81H,82H,83H,84H,85H,86H,87H DB 88H,89H,90H,91H,92H,93H,94H,95H DB 96H,97H,98H,99H END5、硬件设计5.1温度采集模块温度采集部分运用DS18B20传感器,其测温系统简单,测温精度高,连接方便,占用口线少,转换速度快,与微处理器的接口简单,给硬件设计工作带来了极大的方便,能有效地降低成本,缩短开发周期。5.1.1 DS18B20简介 (1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)在使用中不需要任何外围元件。(3)

17、可用数据线供电,电压范围: 3.05.5 V。(4)测温范围:-55 125 。固有测温分辨率为0.5 。(5)通过编程可实现912位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。5.1.2 DS18B20的内部结构(1) 64 b闪速ROM的结构如下: 开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。 (2) 非易市失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。 (3) 高速暂存存储器

18、 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。后者用于存储TH,TL值。数据先写入RAM,经校验后再传给E2RAM。而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下: 低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即是来设置分辨率,如表1所示(DS18B20出厂时被设置为12位)。 设定的分辨率越高,

19、所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。 高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如下所示。其中温度信息(第1,2字节)、TH和TL值第3,4字节、第68字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。 当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5 /LSB形式表示。温度值格式如下: 对应的温度计算:当符号位S=0时,

20、直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。表2是对应的一部分温度值。 DS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若T>TH或TTL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警搜索。 (4) CRC的产生在64 b ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确5.1.3 DS18B20的工作原理 DS18B20 的温度检测与数字数据输出全

21、集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解 18B20的内部存储器资源。18B20 共有三种形态的存储器资源,它们分别是: ROM  只读存储器,用于存放 DS18B20ID 编码,其前 8 位是单线系列编码(DS18B20 的编码是19H) ,后面48 位是芯片唯一的序列号,最后 8位是以上 56的位的 CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20 共 64 位 ROM。 RAM  数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20 共9 个字节 RA

22、M,每个字节为 8 位。第1、2 个字节是温度转换后的数据值信息,第 3、4 个字节是用户 EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第 5 个字节则是用户第 3 个 EEPROM的镜像。第 6、7、8 个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第 9 个字节为前 8个字节的 CRC码。EEPROM  非易失性记忆体,用于存放长期需保存的数据,上下限温度报警值和校验数据, DS18B20共3位EEPROM,并在 RAM 都存在镜像,以方便用户操作。另外,由于DS18B20单线通信功能是分时完成的,他

23、有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。 5.1.4 DS18B20的精确延时问题 虽然DS18B20有诸多优点,但使用起来并非易事,由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成。因此,对读写的操作时序要求严格。为保证DS18B20的严格I/O时序,需要做较精确的延时。在DS18B20操作中,用到的延时有15 s,90 s,270 s,540 s等。因这些延时均为15 s的整数倍,因此可编写一个DELAY15(n)函数,源码如下: 只要用该函数进行大约15 s×N的延时即可。有了比较精确的延时保证,就可以对DS18B20进行读写操作、温度转换及显示等操作。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。软件模块设计和流程图5.2 A/D转换部分本模块采用A/D570进行转换,A/D570内部带有三态输出门,但不是外部可控的,转换结束时,三态门会自动接通,因此,从转换结束到取走数据这段时间内,输出数据线始终被占据。A/D570的输入模拟电压可为单极性,也可为双极性,极性可通过标为15脚的不同接法来选择。但接地时为单极性输入,电压范围为010V,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论