电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx
- 文档编号:26880381
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:41
- 大小:269.36KB
电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx
《电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx》由会员分享,可在线阅读,更多相关《电子系统设计与实践课程设计多点温度测量汇编语言+C语言版.docx(41页珍藏版)》请在冰豆网上搜索。
电子系统设计与实践课程设计多点温度测量汇编语言+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列
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 设计 实践 课程设计 多点 温度 测量 汇编语言 语言版