大连理工大学单片机实验报告.docx
- 文档编号:28188780
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:22
- 大小:124.69KB
大连理工大学单片机实验报告.docx
《大连理工大学单片机实验报告.docx》由会员分享,可在线阅读,更多相关《大连理工大学单片机实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
大连理工大学单片机实验报告
大连理工大学单片机实验报告
————————————————————————————————作者:
————————————————————————————————日期:
ﻩ
大连理工大学本科设计报告
题目:
单总线高精度温度采集系统
课程名称:
单片机综合设计实验
学院(系):
信息与通信工程学院
专 业:
电子信息工程
班级:
电子
学 号:
学生姓名:
成绩:
2016年 5月5日
一.设计要求
1.启动DS18B20进行12位高精度环境温度采集
2.利用12864LCD屏/数码管显示数据
3.具有温度上限声光报警器
4.可以通过键盘设定报警上限值(选)
二.设计分析及系统方案设计
通过DS18B20进行小数12位温度转换、采集,通过单片机读取DS18B20采集到的12位温度值进行二进制到十六进制的转换,利用ZLG7290进行八位数码管显示;利用键盘进入中断来设定报警上限,当温度高于上限时进入报警子程序。
利用SW1进入中断来查看当前设置的温度报警上下限值,利用ZLG7290和数码管来显示。
主程序不断循环采集温度比较,并可随时进入中断来修改温度上下限和查看温度值。
三.系统电路图
四.外围接口模块硬件电路功能描述
1.DS18B20:
用于测定温度,测量范围-55~+125,分辨率为0.0625℃,数据格式为二进制补码形式。
2.ZLG7290B:
用于数码管动态显示驱动,键盘扫描管理。
能够驱动8位共阴极结构的LED数码管或64位独立的LED,同时还能扫描管理多达64个按键的扫描识别,其中八个键可以作为功能键使用。
接口采用I²C结构。
3.蜂鸣器:
这里用作报警,为无源蜂鸣器。
五.主程序中主要变量定义
变量名称
内存单元
功能
TEMPER_L
36H
存放温度低四位
TEMPER_H
35H
存放温度高四位
TEMPER
34H
转换后的温度值
TEMPER_BCDﻩ
33H
BCD形式温度值
TEMPER_NUM
60H
温度值缓冲单元
WSLA_7290
70H
7290写控制单元
RSLA_7290
71H
7290读控制单元
20-27H
数码管显示缓冲区
28H
存放温度上限值
30-31H
存放温度BCD码个位十位
六.系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
GET_TEMPER
无
35H,36H
读取18B20的温度值
READ_18200
35H,36H
无
向18b20读控制字
TEMPER_COV
35H,36H
20H,21H
温度转换成十进制BCD码形式
CF
无
R3,R4
拆分子程序,拆分送数码管显示
INIT_1820
无
无
温度传感器初始化
BUZZER
无无
无
蜂鸣器控制发声子程序
INT_7290
无
28H
读取按键外部中断子程序
RDKEY
无
A
读取键值子程序
DELAY
无
无
延时子程序
七.主程序程序流程图
8.程序清单(要求打印格式要规范、重要的语句要有必要的注释)
SDABITP1.0
SCLBITﻩP1.1ﻩ
ﻩTEMPER_L EQU 36H
ﻩTEMPER_H EQU35H
ﻩﻩTEMPER EQU 34Hﻩﻩ;转换后温度值
ﻩTEMPER_BCD EQU 33Hﻩﻩ;BCD码温度值
TEMPER_NUM EQU60Hﻩ;缓冲单元
ﻩWSLA_7290EQU 70H
RSLA_7290 EQU71Hﻩ
ﻩﻩFLAG1 BIT00H
ﻩDQ BITP3.3ﻩ;总线控制单元
ﻩORGﻩ0000H
ﻩﻩLJMPﻩMAIN
ﻩORGﻩ0003H
LJMPﻩINT_7290
ﻩﻩORGﻩﻩ0100H
MAIN:
ﻩMOVSP,#70H
ﻩﻩﻩ;ZLG7290复位
CLRﻩP1.7
LCALLDELAY
ﻩﻩSETBP1.7ﻩﻩﻩ
ﻩMOV28H,#1EHﻩﻩﻩ;温度上限初始值30度 ﻩﻩﻩ
MOVTMOD,#01Hﻩ;模式一,16位计数器
ﻩﻩSETBﻩEAﻩﻩﻩ;允许INTO中断
ﻩ
MODE:
JBP1.3,SETTMPﻩﻩ;拨码为0时采集温度
;温度采集
TMP:
ﻩCLREX0ﻩﻩﻩ
ﻩMOVﻩ27H,#1FHﻩﻩ;t
LP1:
ﻩﻩLCALLGET_TEMPER
ﻩLCALLﻩTEMPER_COV
ﻩﻩﻩﻩ;7290显示
ﻩMOVﻩR7,#08H
ﻩMOVﻩR0,#20H
MOVﻩR2,#10H
ﻩMOVﻩR3,#WSLA_7290
ﻩLCALLﻩWRNBYT
LCALLDELAYﻩ
ﻩﻩMOVA,TEMPER
ﻩﻩﻩﻩﻩﻩ;判断温度上限
MOVﻩ28H,R5
ﻩﻩCLRﻩC
CJNEA,28H,relﻩ;此处报警温度为30度
rel:
ﻩJCﻩNET
ﻩﻩLCALLﻩBUZZERﻩ;大于等于时蜂鸣器报警
ﻩﻩ;闪烁
ﻩMOVﻩ28H,#70Hﻩ;闪烁命令字
ﻩMOV29H,#7FHﻩ;闪烁命令字
ﻩﻩMOVﻩR7,#02Hﻩﻩ;设定数据个数
ﻩﻩMOVﻩR0,#28Hﻩ;设置源数据首地址
MOVﻩR2,#07Hﻩﻩ;设置外围器件内部寄存器首地址
MOVﻩR3,#WSLA_7290ﻩ;设定外围器件地址
ﻩLCALLﻩWRNBYTﻩ;调用显示子程序
ﻩLCALLﻩDELAY
ﻩLJMPﻩNEXTT
ﻩﻩﻩﻩﻩﻩ;设定温度上限
SETTMP:
SETBﻩEX0
ﻩ;7290复位
CLRP1.7
ﻩLCALLﻩDELAY
ﻩﻩSETBﻩP1.7
ﻩﻩﻩ;显示设定内容
ﻩMOVﻩ27H,#0B6H;S
MOV26H,#9EHﻩ;E
ﻩMOVﻩ25H,#1FHﻩ;T.
ﻩMOVR7,#03H
ﻩMOVR0,#25H
ﻩﻩMOVﻩR2,#15H
ﻩMOVR3,#WSLA_7290
ﻩLCALLﻩWRNBYT
LCALLDELAY
ﻩSJMPNEXTT
NET:
ﻩMOV28H,#70Hﻩ;不能闪烁
ﻩMOVﻩ29H,#00H
ﻩMOVR7,#02H
MOVﻩR0,#28H
ﻩMOVR2,#07H
ﻩMOVﻩR3,#WSLA_7290
ﻩLCALLWRNBYT
ﻩﻩLCALLﻩDELAY
NEXTT:
CALLDELAY
SJMPMODE
GET_TEMPER:
ﻩSETBﻩDQﻩﻩ;定时入口
BCD:
ﻩLCALLﻩINIT_1820
ﻩJBﻩFLAG1,S22ﻩﻩ
ﻩLJMPﻩBCDﻩﻩ;若ds18b20不存在则返回
S22:
LCALLﻩDELAY1
ﻩﻩMOVA,#0CCHﻩﻩ;跳过rom匹配0cch
LCALLﻩWRITE_1820
ﻩMOVA,#44Hﻩﻩ;发出温度转换命令
ﻩLCALLﻩWRITE_1820
ﻩLCALLﻩDELAY
CBA:
ﻩLCALLINIT_1820
ﻩJBﻩFLAG1,ABC
ﻩﻩLJMPﻩCBA
ABC:
ﻩLCALLﻩDELAY1
MOVA,#0CCHﻩ;跳过rom匹配
LCALLWRITE_1820
ﻩMOVﻩA,#0BEHﻩ;发出读温度命令
ﻩLCALLWRITE_1820
LCALLREAD_18200
ﻩRET
WRITE_1820:
ﻩﻩ;写ds18b20程序
ﻩﻩMOVR2,#8
ﻩCLRﻩC
WR1:
CLRﻩDQ
ﻩMOVR3,#6ﻩﻩﻩ;延时24us
ﻩDJNZﻩR3,$
ﻩRRCA
ﻩMOVDQ,C
ﻩMOVR3,#23;延时60us
ﻩDJNZﻩR3,$
SETBDQ
NOP
ﻩDJNZﻩR2,WR1
ﻩﻩSETBﻩDQ
RET
READ_18200:
ﻩﻩﻩ;从1820中读出两个字节温度数据
ﻩﻩPUSHﻩ01H
ﻩMOVﻩR4,#2
ﻩﻩMOVR1,#36H
RE00:
ﻩMOVR2,#8
RE01:
CLRﻩC
SETBﻩDQ
ﻩNOP
ﻩCLRDQ
NOP
ﻩNOP
ﻩSETBﻩDQ
ﻩﻩMOVﻩR3,#2
ﻩﻩDJNZR3,$
ﻩMOVﻩC,DQ
MOVﻩﻩR3,#23H
ﻩDJNZﻩR3,$
ﻩﻩRRCA
ﻩDJNZR2,RE01
ﻩMOVﻩﻩ@R1,A
DECﻩﻩR1
ﻩDJNZR4,RE00
POPﻩﻩ01H
ﻩﻩRETU8
TEMPER_COV:
ﻩﻩﻩﻩﻩ;将读出的数据转换
ﻩPUSHDPH
ﻩﻩPUSHDPL
PUSHﻩ02H
ﻩﻩMOVﻩA,#0F0H
ﻩﻩANLﻩA,TEMPER_Lﻩﻩ;舍去小数点后的四位
ﻩSWAPﻩA
ﻩMOVTEMPER_NUM,A
ﻩMOVA,TEMPER_H
ﻩANLﻩA,#07H
SWAPA
ﻩADDﻩA,TEMPER_NUM
ﻩMOVﻩﻩTEMPER,A
ﻩﻩﻩﻩﻩ;转换成十进制数显示
MOVﻩB,#10
ﻩDIVAB
MOVﻩ30H,B;个位
ﻩMOVﻩB,#10
DIVAB
ﻩﻩMOV31H,Bﻩ;十位
ﻩANLA,#0FH;百位
ﻩﻩSWAPﻩA
ﻩADDﻩA,B
ﻩMOVﻩTEMPER_BCD,A
ﻩLCALLCF2;拆分查表
ﻩMOVﻩ25H,R3
ﻩMOV26H,R4
MOVﻩA,30H
ﻩANLﻩA,#0FH
ﻩLCALLCF
MOV24H,R3
ﻩ;处理四位小数位数据
ﻩMOVA,TEMPER_L
ﻩANLA,#0FH;取低四位数据
ﻩﻩMOVB,#02H
ﻩﻩMULABﻩﻩ;字节转为字
ﻩﻩMOVDPTR,#NUMSEG
ﻩMOVCA,@A+DPTR
ﻩMOVTEMPER_BCD,A
ﻩLCALLﻩCF2
ﻩMOV22H,R3
MOV23H,R4
MOVA,TEMPER_L
ﻩANLA,#0FH
ﻩMOVﻩB,#02H
ﻩMULﻩAB
ﻩINCA
ﻩﻩMOVCA,@A+DPTR
ﻩMOVﻩTEMPER_BCD,A
ﻩLCALLﻩCF2
MOVﻩ20H,R3
ﻩMOVﻩ21H,R4
ﻩ
ﻩPOPﻩ02H
ﻩPOPDPL
ﻩPOPﻩDPH
RET
;--------------小数部分查表------------------------
NUMSEG:
DW0000H,0625H,1250H,1875H,2500H,3125H,3750H,4375H
DW5000H,5625H,6250H,6875H,7500H,8125H,8750H,9375Hﻩ
;--------------------------------------------------
;--------------拆分显示整数子程序------------------
CF:
ﻩﻩPUSHﻩ02H
ﻩPUSHﻩDPH
PUSHDPL
ﻩMOVDPTR,#LEDSEG
ﻩﻩMOVR2,TEMPER_BCD
ﻩﻩANLﻩA,#0FH
MOVCﻩA,@A+DPTRﻩ;查表得字形码
ﻩMOVﻩR3,A
ﻩMOVﻩA,R2
ﻩﻩSWAPA
ﻩﻩANLA,#0FH
MOVCﻩA,@A+DPTR
MOVR4,A
INCﻩR3ﻩ;加上小数点
POPﻩDPL
ﻩPOPDPH
ﻩPOP02H
ﻩﻩRETﻩ
;-----------------------------------------------
;--------------拆分显示小数子程序------------------
CF2:
ﻩPUSHﻩ02H
ﻩPUSHDPH
ﻩPUSHﻩDPL
ﻩPUSHACC
ﻩMOVDPTR,#LEDSEG
ﻩﻩMOVﻩR2,TEMPER_BCD
ﻩMOVﻩA,R2
ﻩANLA,#0FH
ﻩﻩMOVCA,@A+DPTR
ﻩﻩMOVR3,A
MOVA,R2
ﻩSWAPﻩA
ﻩANLﻩA,#0FH
MOVCﻩA,@A+DPTR
ﻩMOVﻩR4,A
ﻩ;加上小数点
ﻩPOPﻩACC
ﻩﻩPOPDPL
POPDPH
ﻩﻩPOPﻩ02H
RETﻩ
;-----------------------------------------------
;-----------------led字型码---------------------
LEDSEG:
DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H
DBﻩ0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH
;-----------------------------------------------
INIT_1820:
ﻩSETBﻩDQ
ﻩﻩNOP
CLRDQ
ﻩMOVﻩR0,#80H
TSR1:
ﻩDJNZR0,TSR1ﻩ;延时300us
ﻩﻩSETBDQ
MOVﻩR0,#25Hﻩ;96us
TSR2:
DJNZﻩR0,TSR2
ﻩJNBﻩDQ,TSR3
LJMPTSR4ﻩﻩﻩ;延时
TSR3:
ﻩSETBﻩFLAG1ﻩ;致标志位
ﻩﻩLJMPﻩTSR5ﻩﻩﻩﻩ;ds18b20存在
TSR4:
CLRﻩFLAG1ﻩﻩﻩ;清标志位
ﻩﻩLJMPﻩTSR7ﻩﻩ;ds18b20不存在
TSR5:
MOVﻩR0,#06BHﻩ;延时200us
TSR6:
DJNZﻩR0,TSR6
TSR7:
SETBﻩDQ
RET
DELAY1:
MOVR7,#20H;80us延时
ﻩﻩDJNZR7,$
ﻩﻩRET
;---------------蜂鸣器驱动子程序--------------
BUZZER:
PUSH07H
MOVﻩR7,#00H
MOVﻩTL0,#33Hﻩ;设置定时0.5us初值
ﻩMOVTH0,#0FEH
SETBTR0ﻩﻩﻩ;启动t0
WAIT:
ﻩJNBﻩTF0,$
ﻩCLRTF0
ﻩMOVTL0,#33H
MOVTH0,#0FEH
ﻩCPLP1.2
DJNZﻩR7,WAIT
ﻩCLRTR0
SETBﻩP1.2
ﻩPOPﻩ07H
RET
;---------------------------------------------
;-------------外部中断服务程序----------------
INT_7290:
PUSHﻩ00H
PUSHﻩ01H
PUSHﻩ02H
PUSHﻩ03H
ﻩPUSHﻩ04H
PUSH07H
ﻩPUSHACC
PUSHﻩPSW
SJMPﻩRD1
ﻩ
RD1:
JBﻩP3.2,$ﻩﻩ;以查询方式等待下一次按键操作
SWAPA
LCALLﻩRDKEY
ﻩCJNEA,#0AH,WAITT;容错功能调整
WAITT:
JNC ﻩRD1ﻩ
ﻩMOVﻩﻩTEMPER_BCD,A
ﻩLCALLCF2
MOVB,#0AH
ﻩﻩMULﻩﻩAB
ﻩMOVﻩR5,A
MOVﻩﻩ23H,R3
ﻩMOVﻩﻩR7,#01H
ﻩMOVﻩR0,#23H
ﻩMOVﻩR2,#13H
MOVﻩR3,#WSLA_7290
ﻩLCALLﻩWRNBYT
KEY2:
ﻩJBﻩP3.2,$ﻩﻩ;以查询方式等待下一次按键操作
ﻩLCALLRDKEY
ﻩCJNEﻩA,#0AH,WAITT2
WAITT2:
ﻩJNCKEY2
ﻩMOVﻩTEMPER_BCD,A
ﻩLCALLﻩCF2
ﻩﻩMOVﻩA,R5
ﻩADDﻩA,TEMPER_BCD
ﻩMOVR5,A
ﻩMOVﻩ22H,R3
MOV21H,#9CHﻩﻩ;C
ﻩMOVR7,#02H
ﻩMOVﻩR0,#21H
ﻩMOVﻩﻩR2,#11H
ﻩﻩMOVR3,#WSLA_7290
ﻩLCALLﻩWRNBYT
ﻩ;确定键
COMF:
JBP3.2,$ﻩ;等待确认键
LCALLﻩRDKEY
ﻩCJNEA,#0FH,COMF
ﻩﻩMOV28H,R5ﻩ;上限值放入28h中
DOWN:
ﻩ;7290复位
CLRP1.7
LCALLﻩDELAY
SETBﻩP1.7
CLRIE0ﻩ;必须清标志
POPPSW
POPACC
POP07H
POPﻩ04H
POPﻩ03H
POPﻩ02H
POP00H
RETI
;---------------------------------------------
;------------读取键值子程序(键值保存在A中)---
RDKEY:
MOVﻩR0,#1FH
ﻩMOVﻩR7,#01H
ﻩﻩMOVﻩR2,#01H
ﻩﻩMOVﻩR3,#WSLA_7290
ﻩMOVR4,#RSLA_7290
ﻩLCALLﻩRDADD
ﻩMOVﻩA,1FH
ﻩDECﻩA
ﻩRET
;----------------------------------------------
;------------延时子程序-----------------------
DELAY:
PUSHﻩ00Hﻩ;延时子程序
ﻩPUSH01H
ﻩMOVR1,#00
LP:
ﻩMOVﻩR1,#00H
DJNZR1,$
DJNZR0,LP
ﻩﻩPOP01H
ﻩPOP00H
ﻩRET
;---------------------------------------------
(I2C子程序省略)
九.系统调试运行结果说明、分析所出现得问题,设计体会与建议
硬件使用ZLG51单片机开发平台,软件使用KEil2软件进行程序的编写编译以及调试。
运行结果:
能够实现当前环境温度的采集以及分为整数部分和小数部分的显示,设定温度上限,超过设定上限温度进行蜂鸣器报警,数码管同时闪烁,温度低于设定值立刻停止闪烁和报警。
能够通过拨码控制模式切换,切换到设定上限温度模式,通过按键输入上限温度值改变当前上限温度,能够纠错,输入10以上的数字时不显示,按下确定键时确定温度上限值。
问题:
(1)采集的温度为十六进制数字,如何转换成十进制BCD码。
通过查询上学期学习的计算机原理的相关算法,解决了此问题,成功显示。
(2)小数部分的显示问题。
通过将有可能出现的小数情况列举并进行查表显示,最后成功显示。
(3)高于温度报警闪烁之后,温度下降以后数码管仍然闪烁,后来发现是子程序逻辑错误已经改正。
十.结论及设计体会
通过本次实验,我对DS18B20芯片有了一定的了解,对于DS18B20编程的时序要求以及相应的编程操作流程有了更深度的掌握。
这次实验综合了中断、查询、时钟、ZLG7290芯片、DS18B20芯片等很多知识。
本次试验采用子程序调用的方法进行设计,可以逐一的进行调试,对于代码量比较大的程序来说子程序设计还是很好的编程开发方式。
此次试验中遇到很多细节的错误,比如子程序顺序混乱等逻辑错误,导致程序总是出现错误,幸好在最后都成功的改正了。
在代码量比较大的程序设计时,不能只对软件代码进行修改,还要结合硬件调试,否则很难看出问题,同时不怕错误,会正确的调试方法,灵活使用断点,会找错并改错也是很重要的素质。
这次实验对我以后的程序设计任务有很大的启发作用,让我明白了程序设计的基本顺序和需要注意的地方以及调试方法,相信在以后的学习和工作中都会受益。
最后感谢老师的悉心教导。
参考文献
[1] 《MCS-51单片机应用实验教程》 作者:
陈育斌,秦晓梅等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大连理工大学 单片机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)