电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx

上传人:b****4 文档编号:26880381 上传时间:2023-06-23 格式:DOCX 页数:41 大小:269.36KB
下载 相关 举报
电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx_第1页
第1页 / 共41页
电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx_第2页
第2页 / 共41页
电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx_第3页
第3页 / 共41页
电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx_第4页
第4页 / 共41页
电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx

《电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx》由会员分享,可在线阅读,更多相关《电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx(41页珍藏版)》请在冰豆网上搜索。

电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx

电子系统设计与实践课程设计多点温度测量汇编语言+C语言版

《电子系统设计与实践》

课程设计报告

 

课程设计题目:

多点温度测量系统设计

专业班级:

2012级电子信息科学与技术

学生姓名:

罗滨志(120802010051)

张倩(120802010020)

冯礼哲(120802010001)

吴道林(120802010006)

朱栖安(120802010039)

指导老师:

刘万松老师

成绩:

2015年6月27日

 

4实验步骤29

4.1汇编语言程序调试29

 

4.3实验仿真31

 

摘要

温度是我们生活中非常重要的物理量。

随着科学技术的不断进步与发展,温度测量在工业控制、电子测温计、医疗仪器,家用电器等各种控制系统中广泛应用。

温度测量通常可以使用两种方式来实现:

一种是用热敏电阻之类的器件,由于感温效应,热敏电阻的阻值能够随温度发生变化,当热敏电阻接入电路时,则流过它的电流或其两端的电压就会随温度发生相应的变化,再将随温度变化的电压或者电流采集过来,进行A/D转换后,发送到单片机进行数据处理,通过显示电路,就可以将被测温度显示出来。

这种设计需要用到A/D转换电路,其测温电路比较麻烦。

第二种方法是用温度传感器芯片,温度传感器芯片能把温度信号转换成数字信号,直接发送给单片机,转换后通过显示电路显示即可。

这种方法电路比较简单,设计方便,现在使用非常广泛。

关键词:

多点温度测量单片机温度传感器

1总体设计

多路温度测量系统的总体结构如图1所示,根据要求,整个系统包含以下几个部分:

51单片机、时钟电路、复位电路组成的51单片机小系统;多块测温模块;显示温度值的显示模块和按键模块。

测温模块由温度传感器组成,温度传感器采用美国Dallas半导体公司推出的智能温度传感器DS18B20,温度测量范围为-55--+125,可编程为9到12位的A/D转换精度,测温分辨率可达0.0625C,完全能够满足系统要求。

DS18B20采用单总线结构,只需要一根数据线DQ即可与单片机通信,多个DS18B20可同时连接在一根数据线上与单片机通信。

显示器可采用LCD液晶显示器,显示信息量大、效果好、使用方便。

图1多路温度测量系统的总体结构

系统处理时,由51单片机控制从各个测温模块测量出温度数字量,存入缓冲区;然后通过按键控制,从缓冲区取出,根据数字量和温度的关系计算出温度值,依次送LCD显示器显示。

1.1功能要求

多点温度测量系统的功能要求如下:

(1)能够测量多点温度;

(2)精度0.1C;

(3)能够通过显示器显示测量点编号和温度值;

(4)可轮流显示各测量点或指定显示某个测量点。

1.2总体方案及工作原理

单片机系统由AT89C51单片机,复位电路和时钟电路组成,时钟采用12MHZ的晶振,温度模块由4块温度传感器DS18B20组成,单总线结构,所有的DS18B20的DQ连接在一起与单片机的P3.0相连,通过上拉电阻连接电源,每一个DS18B20都有一个唯一的64位ROM地址,只要发送相应的ROM地址,就能够访问该器件,要访问某个DS18B20,就必须知道它的64位ROM地址,可以通过程序读出它的ROM地址,由于读ROM地址时,一次只能接入一个DS18B20,因此,4个DS18B20的数据线DQ通过开关连接到AT89C51的P3.0.

另外,所有DS18B20的VDD引脚接+5V电源,GND接地;显示器采用LCD1602(LM016L),其数据线与AT89C51的P2口相连,RS与P1.7相连,R/W与P1,6相连,E端与P1.5相连。

设定了两个按键,K0为功能键,与AT89C51的P1.0相连,当K0输入低电平时,读入DS18B20的ROM地址,当K0键输入高电平时,显示选中DS18B20的温度值;K1为测量点选中键,与AT89C51的P1.1相连,用于测量点选择,每按一次,测量点号加1,读入下一个DS18B20的ROM地址或显示下一个DS18B20的相应温度值。

2系统硬件设计

2.1器件选择

2.1.1主要器件的型号

元件名称

数量

AT89C51芯片

1

温度传感器(DS18B20)

4

33PF晶振(CRYSTAL)

1

10uF电解电容(CAP-ELEC)

1

33pF普通电容(CAP)

2

LCD液晶显示器(LM016L)

1

300R电阻(RES)

1

5K电阻(RES)

1

开关(SW-SPST)

1

按钮(BUTTON)

5

BUS

2

2.1.2AT89C51

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-FALSHPROGRAMMABLEANDERASABLEREADONLYMEORY)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的单片机,单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,

AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。

其基本结构如图2

图2AT89C51单片机的基本结构

AT89C51是一个低电压,高性能CMOS8位单片机,片内含8kB的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置有通用8位中央处理器(CPU)和Flash存储单元。

图3AT89C51单片机的引脚

VCC/GND:

供电电源。

P0口:

可以被定义为数据/地址的低八位,能够用于外部程序/数据存储器。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

标准输入输出I/O口,P1口管脚写入1后,被内部上拉为高,可用作输入。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

既可用于标准输入输出I/O,也可用于外部程序存储器或数据存储器访问时的高八位地址。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

既可以作标准输入输出I/O,也可作为AT89C51的一些特殊功能口,管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

2.1.3智能温度传感器DS18B20电路

四个DS18B20分别接一个按钮开关,便于分别控制温度,DS18B20的VCC接口接入同一总线且与显示器VDD接口相连,DQ接口与AT89C51的P3.0接口相连,GND接地,如图4;

图4智能温度传感器原理图

2.1.4晶振电路方案

晶振电路的功能在于给单片机提供振荡时钟信号,使单片机正常工作。

本设计中采用了常用的晶振电路组成方案,具体如图5所示。

图5晶振电路

2.1.5LED液晶显示器

图6液晶显示器

2.1.6复位电路方案

复位电路的功能在于对单片机进行复位从而达到对整个电路复位的功能。

要达到目的则要求在复位按键按下后在RST引脚上要出现一个维持2个机器周期高电平[4]。

考虑到可以利用电容的电压不能突变(需要一定的充放电时间),于是采用如下复位电路。

图7复位电路

2.2硬件原理图

图8硬件原理图

3系统软件设计

3.1基本原理

多路温度测量系统的软件程序主要由主程序、读DS18B20模块ROM地址程序、显示DS18B20模块ROM地址、读DS18B20模块温度值程序、显示DS18B20模块温度值程序和LCD、DS18B20模块驱动程序等组成。

3.1.1主程序

主程序的流程图如图9所示。

图9主程序流程图

在主程序中,首先对LCD初始化,其次通过检测按键,判断是读DS18B20模块的ROM地址还是读DS18B20模块的温度值,如果是读ROM地址,则依次调用读ROM程序和显示ROM程序;如果是读温度,则调用测量温度程序和显示温度程序,注意测量某个DS18B20模块之前,一定要读出该模块的ROM并保存到相应的存储单元。

3.1.2读ROM地址程序

读ROM地址程序的流程如图10所示。

读ROM地址时,一次只能把一片DS18B20模块连接到单总线上,读ROM程序实现把当前连接到总线上的DS18B20的ROM地址读出。

读ROM地址程序处理过程如下,先计算存放当前DS18B20模块ROM地址的存储单元的偏移地址,然后依次是DS18B20初始化、发读ROM命令和读ROM地址到存储单元。

如图10读ROM地址程序的流程

3.1.3显示ROM地址程序

显示ROM地址程序实现依次从当前存放ROM地址的缓冲区中取出地址显示,显示ROM地址程序的流程图如图11所示。

如图11显示ROM地址程序的流程图

3.1.4读选中DS18B20温度的程序

读选中DS18B20温度的程序的流程图如图12所示。

读选中DS18B20模块温度值的处理过程分3个步骤,第一是向总线放启动温度转换命令,启动连接总线上的DS18B20模块温度转换,由于12位DS18B20温度转换时间比较长,所以启动转换后一定要调用延时程序等待转换完成后才能去读温度值;第二根据当前器件号取当前DS18B20器件的64位ROM地址,发送到总线匹配对应的DS18B20模块;第三向总线发读暂存器命令读匹配的DS18B20模块转换的温度值。

如图12读选中DS18B20温度的程序的流程图

3.1.5显示温度程序

显示温度程序的流程如图13所示。

显示温度程序显示读出的温度值及相应的提示信息。

DS18B20的温度值是2位,存放在两个字节中,其中高字节的高5位为符号位,如果温度值是正数,则符号位为0,如果温度值是负数,则符号位为1。

显示温度处理程序时,先根据高字节的高5位判断是正数还是负数,如果是正数,则提取其中的百位、十位、个位及小数位,转换成字符编码放入相应的显示缓冲区;如果是负数,则提取其中的负号、十位、个位及小数位,转换成字符编码,放入相应的显示缓冲区;最后把显示缓冲区的内容显示到LCD显示器。

如图13显示温度程序的流程

3.2软件清单

3.2.1汇编语言程序

;系统时钟频率12MHZ

;第一片18B20的ROM地址放在20H-27H

;第二片18B20的ROM地址放在30H-37H

;第三片18B20的ROM地址放在40H-47H

;第二片18B20的ROM地址放在50H-57H

DQBITP3.0;定义单总线端口

EBITP1.5;定义LCD端口

RWBITP1.6

RSBITP1.7

K0BITP1.0;定义功能开关,K0断开,显示温度;K0接通,读ROM

K1BITP1.1;定义通道选择键

NUM1EQU3EH;定义存放读ROM的编号

NUM2EQU3FH;定义存放显示通道的编号

LCD_3EQU3DH;存放通道温度的百、十、个、小数位

LCD_2EQU3CH

LCD_1EQU3BH

LCD_0EQU3AH

TEMP_DATA_LEQU4EH;存放读出的18B20的12为编码

TEMP_DATA_HEQU4FH

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

MOVSP,#60H

MOVNUM1,#0;编号初始化为0

MOVNUM2,#0

CALLLCD_INIT;LCD初始化

AGAIN:

JBK0,DISPTEMP;判读ROM,还是显示温度

READ:

JBK1,NEXT1;读ROM,默认读0号,按一次K1编号加1

JNBK1,$

INCNUM1

MOVA,NUM1

CJNEA,#4,NEXT1;如果加到4,则回到0

MOVNUM1,#0

NEXT1:

LCALLREAD_ROM;读当前ROM保存

LCALLDISP_ROM;显示当前ROM

SJMPAGAIN

DISPTEMP:

JBK1,NEXT2;显示温度,默认显示0号,按一次K1编号加1

JNBK1,$

INCNUM2

MOVA,NUM2

CJNEA,#4,NEXT2;如果加到4,则回到0

MOVNUM2,#0

NEXT2:

LCALLREAD_TEMP;读当前匹配18B20的温度,保存

LCALLDISP_TEMP;显示当前匹配18B20的温度

SJMPAGAIN

;**************************************

;匹配ds18b20,读模块温度值到缓冲区

;**************************************

READ_TEMP:

MOVR0,#20H

MOVA,NUM2

MOVB,#10H;由编号取得缓冲区地址

MULAB

ADDA,R0

MOVR0,A

LCALLDS18B20_INIT;18B20初始化

MOVA,#0CCH;跳过ROM命令

LCALLWRITE_BYTE

MOVA,#44H;启动温度转换

LCALLWRITE_BYTE

LCALLDELAY

LCALLDELAY

LCALLDS18B20_INIT;18B20初始化

MOVA,#55H

LCALLWRITE_BYTE;发匹配命令

MOVR5,#08H

LOOPREAD:

MOVA,@R0;送入匹配的64位ROM地址

LCALLWRITE_BYTE

INCR0

DJNZR5,LOOPREAD

MOVA,#0BEH

LCALLWRITE_BYTE;发读暂存器

LCALLREAD_BYTE;读出温度低字节

MOVTEMP_DATA_L,A

LCALLREAD_BYTE;读出温度高字节

MOVTEMP_DATA_H,A

RET

;****************************************

;显示匹配模块温度程序

;****************************************

DISP_TEMP:

MOVA,#80H;写入显示缓冲区起始地址为第1行第1列

ACALLWC51R

MOVA,#'A';第1行第1列显示字母A

ACALLWC51DDR

MOVA,#'D';第1行第2列显示字母D

ACALLWC51DDR

MOVA,#'D';第1行第3列显示字母D

ACALLWC51DDR

MOVA,#'R';第1行第4列显示字母R

ACALLWC51DDR

MOVA,#':

';第1行第5列显示字母:

ACALLWC51DDR

MOVA,#'';第1行第6列显示空格

ACALLWC51DDR

MOVA,NUM2;第1行第7列显示编号

ADDA,#30H

ACALLWC51DDR

MOVA,#0C0H;写入显示缓冲区起始地址为第2行第1列

ACALLWC51R

MOVA,#'T';第2行第1列显示字母T

ACALLWC51DDR

MOVA,#'E';第2行第2列显示字母E

ACALLWC51DDR

MOVA,#'M';第2行第3列显示字母M

ACALLWC51DDR

MOVA,#'P';第2行第4列显示字母P

ACALLWC51DDR

MOVA,#':

';第2行第5列显示字母:

ACALLWC51DDR

CONVERT_T:

MOVA,TEMP_DATA_H

ANLA,#80H

JZTEMPC1;如果温度寄存器里的高位为1,则温度为负

CLRC

MOVA,TEMP_DATA_L

CPLA;负温度将补码转成二进制,取反再加1

ADDA,#01H

MOVTEMP_DATA_L,A

MOVA,TEMP_DATA_H

CPLA

ADDCA,#00H

MOVTEMP_DATA_H,A

MOVA,TEMP_DATA_L

ANLA,#0FH

MOVDPTR,#TABLE2

MOVCA,@A+DPTR;查表得小数位的值

MOVLCD_0,A

MOVA,TEMP_DATA_L

ANLA,#0F0H

SWAPA

MOVTEMP_DATA_L,A

MOVA,TEMP_DATA_H

ANLA,#0FH

SWAPA

ORLA,TEMP_DATA_L

MOVB,#100

DIVAB

MOVLCD_3,#'-';负温度最高位显示“-”号

SJMPTEMPC2

TEMPC1:

MOVA,TEMP_DATA_L

ANLA,#0FH

MOVDPTR,#TABLE2

MOVCA,@A+DPTR

MOVLCD_0,A;查表得小数位的值

MOVA,TEMP_DATA_L

ANLA,#0F0H

SWAPA

MOVTEMP_DATA_L,A

MOVA,TEMP_DATA_H

ANLA,#0FH

SWAPA

ORLA,TEMP_DATA_L

MOVB,#100

DIVAB

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVLCD_3,A;正温度的百位

TEMPC2:

MOVA,#10

XCHA,B

DIVAB

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVLCD_2,A;温度值的十位

MOVA,B

MOVDPTR,#TABLE1

MOVCA,@A+DPTR

MOVLCD_1,A;温度值的个位

MOVA,LCD_3

ACALLWC51DDR;第2行第6列显示温度的百位或“-”

MOVA,LCD_2

ACALLWC51DDR;第2行第7列显示温度的十位

MOVA,LCD_1

ACALLWC51DDR;第2行第8列显示温度的个位

MOVA,#'.'

ACALLWC51DDR;第2行第9列显示小数点‘.‘

MOVA,LCD_0

ACALLWC51DDR;第2行第10列显示温度的小数位

MOVA,#''

ACALLWC51DDR;第2行后面的显示空格

MOVA,#''

ACALLWC51DDR

MOVA,#''

ACALLWC51DDR

MOVA,#''

ACALLWC51DDR

MOVA,#''

ACALLWC51DDR

MOVA,#''

ACALLWC51DDR

RET

;**************************************

;从ds18b20中读出64位序列号

;**************************************

READ_ROM:

MOVR5,#8

MOVA,NUM1;由编号取得缓冲区地址

MOVB,#10H

MULAB

MOVR1,#20H

ADDA,R1

MOVR1,A

LCALLDS18B20_INIT;18B20初始化

MOVA,#33H

LCALLWRITE_BYTE;发读ROM命令

D1:

LCALLREAD_BYTE;读64位ROM,存入缓冲区

MOV@R1,A

INCR1

DJNZR5,D1

RET

;*************************************

;将读出的64位序列号显示在LCD上

;*************************************

DISP_ROM:

MOVA,#80H;写入显示缓冲区起始地址为第1行第1列

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

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

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