当前位置: 首页 > news >正文

关于汇编语言与程序设计——单总线温度采集与显示的应用

一、实验要求

(1)握码管的使用方式

(2)掌握DS18B20温度传感器的工作原理

(3)掌握单总线通信方式实现 MCU与DS18B20数据传输

二、设计思路

1.整体思路

  通过编写数码管显示程序和单总线温度采集程序,结合温度传感报警,利用手指触碰传感器,当温度超过阈值时开启蜂鸣器报警。

2.流程图

3.主要模块设计思路及分析

1判断温度是否达到阈值

(2)蜂鸣器子程序

三、 实现效果

T0子程序设置高低位温度

查表转换温度值

判断温度是否达到阈值:设置阈值为30度,达到则跳转蜂鸣器报警

蜂鸣器子程序

实现效果:

室温时显示26度

当升温至30度则会报警

四、总结

在这次实验中,我学习了如何通过DS18B20温度传感器来采集和显示温度。我了解到,DS18B20是一种常用的数字温度传感器,它可以通过单总线通信方式与MCU进行数据传输。这种方式相比于传统的模拟温度传感器,具有更高的精度和可靠性。

在实验过程中,我遇到了一些困难,例如如何正确地连接编码器和DS18B20传感器,以及如何编写相应的程序来读取和显示温度。最开始当达到设置的阈值时,蜂鸣器不会报警响应,在询问同学后我添加了一个DEL子程序来控制蜂鸣子程序的响应。

附录:

DAT		BIT		P3.7  ;定义DQ线
swpH	EQU		0D2H	
swpL	EQU		0EFH	
WDLSB	DATA	30H		;定义温度低字节
WDMSB	DATA	31H		;定义温度高字节
ORG		0000H
LJMP	MAIN
ORG		000BH
LJMP	T0_INT
ORG		0100HVALUE:	DB 3FH, 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ;共阴极
T0_INT: MOV	TH0, #swpHMOV	TL0, #swpLPUSH ACC 		 ;A进栈保护LCALL ALARM 		 ;判断是否达到温度阈值JB	21H,dsl 	 ;判断输出温度高位还是低位MOV	R1,42H		 ;高位温度放至R1MOV DPTR, #100HLCALL LOOP2 	 ;循环,使DPTR变为相应温度位的值,再通过查表形式获得对应温度段码MOV A, #0HMOVC A, @A+DPTRMOV P0, A		 ;将高位温度传至P0MOV P2, #1CHPOP ACC 		 ;出栈ACC完成对ACC的保护SJMP kkk
dsl:MOV R1,43H		 ;低位温度放至R1MOV DPTR, #100HLCALL LOOP2MOV A, #0HMOVC A, @A+DPTRMOV P0, A		 ;低位温度传至R2MOV P2, #18HPOP ACC 		
LOOP2:				 ;将DPTR变至响应温度的值DEC R1INC DPTRCJNE R1, #0FFH, LOOP2 RET
kkk:CPL	21H 			;21H取反RETI 				;中断返回
MAIN:CLR EA				;关中断MOV TMOD,#01H		;设置T0初始化MOV TH0,#swpH		;装入定时器10ms中断的定时常数MOV TL0,#swpL		;SETB EA		  		;开中断SETB ET0	  		;允许定时器T0中断SETB TR0	  		;启动定时器T0计数MOV R2,#2			;MOV R0,#42H			;2个显示缓冲单元42H和43H清0
OVER:			  MOV @R0,#00H		INC R0				;指针R0指向43HDJNZ R2,OVER
LOOP:				LCALL DSWD			;调用读出温度子程序SJMP LOOP
DSWD:LCALL RSTSNR		;调用复位子程序JNB F0,KEND			;未应答则跳转KENDMOV R0,#0CCH   		;跳过ROM匹配指令LCALL SEND_BYTE	 	;发送一字节跳过ROM匹配命令MOV R0,#44H	   		;温度转换命令LCALL SEND_BYTE		;发送一字节温度转换指令SETB EAMOV 48H,#1		 	;延时75ms以上准备读
SS2:MOV 49H,#255
SS1:MOV 4AH,#255
SS0:DJNZ 4AH,SS0		DJNZ 49H,SS1DJNZ 48H,SS2CLR EALCALL RSTSNRJNB F0,KENDMOV R0,#0CCH		 ;跳过ROM匹配命令LCALL SEND_BYTEMOV R0,#0BEH	 	 ;温度命令BEHLCALL SEND_BYTE		 ;发出一字节读温度命令LCALL READ_BYTE	 	 ;读一字节的温度值MOV WDLSB,A			 ;读一字节的温度值(低字节)LCALL READ_BYTE	 	 ;读一字节的温度值MOV WDMSB,A			 ;读一字节的温度值(高字节)LCALL TRANS12	 	 ;调用温度转换子程序
KEND:SETB EARET
TRANS12:		  MOV A,30H			 ;温度转换子程序ANL A,#0F0HMOV 3AH,AMOV A,31HANL A,#0FHORL A,3AHSWAP AMOV B,#10DIV ABMOV 43H,BMOV B,#10DIV ABMOV 42H,BMOV 41H,ARETSEND_BYTE:MOV A,R0			 ;发送一个字节的子程序MOV R5,#8
SEN3:CLR CRRC AJC SEN1LCALL WRITE_0SJMP SEN2
SEN1:LCALL WRITE_1
SEN2:DJNZ R5,SEN3		 ;循环八次发送一个字节 RETREAD_BYTE:MOV R5,#8			 ;读一个字节的子程序
READ1:LCALL READRRC ADJNZ R5,READ1		 ;循环八次读一个字节MOV R0,ARET
RSTSNR:SETB DAT			 ;复位程序NOPNOPCLR DATMOV R6,#250			 DJNZ R6,$MOV R6,#50DJNZ R6,$SETB DAT			 ;主机释放总线,IO口改为输入MOV R6,#15DJNZ R6,$CALL CHCK			 ;调用应答子程序MOV R6,#60DJNZ R6,$SETB DATRET
CHCK:MOV C,DATJC RST0SETB F0				 ;检测到信号置为F0SJMP CHCK0
RST0:CLR F0				 
CHCK0:RET
WRITE_0:CLR DAT				 ;写0子程序MOV R6,#30DJNZ R6,$SETB DATRET
WRITE_1:				 ;写1子程序CLR DATNOPNOPNOPNOPNOPSETB DATMOV R6,#30DJNZ R6,$RETREAD:					 ;读一位数据子程序SETB DATNOPNOPCLR DATNOPNOPSETB DAT			 ;置位DAT准备接收数据NOPNOPNOPNOPNOPNOPNOPMOV C,DATMOV R6,#23DJNZ R6,$RETALARM:					;判断温度是否达到阈值,设置温度阈值为30MOV A, 43HSUBB A, #00HMOV A, 42HSUBB A, #03H	   JNC BUZZER 			CLR CRETBUZZER: 				;蜂鸣器响应子程序MOV R1,#0FFHCPL P2.5LCALL DELRET

http://www.xdnf.cn/news/338059.html

相关文章:

  • React 笔记[1] hello world
  • 【程序员AI入门:应用开发】8.LangChain的核心抽象
  • 基于springboot+vue的校园部门资料管理系统
  • 2025最新免费视频号下载工具!支持Win/Mac,一键解析原画质+封面
  • 小刚说C语言刷题—1341银行存款问题
  • 到达最后一个房间的最少时间II 类似棋盘转移规律查找
  • python打卡day19
  • 爱普生FC2012SN晶振在TWS蓝牙耳机中的应用优势
  • 代理服务器
  • 《Zabbix Proxy分布式监控实战:从安装到配置全解析》
  • uniapp|获取当前用户定位、与系统设定位置计算相隔米数、实现打卡签到(可自定义设定位置、位置有效范围米数)
  • 【本地搭建npm私服】使用Verdaccio
  • K8s中的containerPort与port、targetPort、nodePort的关系:
  • ping_test_parallel.sh 并行网络扫描脚本
  • 《零基础学机器学习》学习大纲
  • ruoyi-flowable-plus 前端框架启动报错修复
  • openwrt之UCI 增删改查(add/get/set /add_list...)
  • c++进阶——红黑树的实现
  • 使用Jmeter对AI模型服务进行压力测试
  • CSS3 过渡与动画
  • 体绘制中的传输函数(transfer func)介绍
  • JDBC:java与数据库连接,Maven,MyBatis
  • 3D医学影像开发<五>:利用Hessian矩阵增强影像并设置固定阈值进行血管模型自动分割
  • 认识不同格式的点云数据 -PCD点云数据 文本点云数据
  • 【前端】webstorm运行程序浏览器报network error
  • PyTorch 版本、torchvision 版本和 Python 版本的对应关系
  • iptables 访问控制列表使用记录
  • 在UI原型设计中,低、高保真原型图有什么区别?
  • 用NVivo革新企业创新:洞悉市场情绪,引领金融未来
  • 使用thymeleaf模版导出swagger3的word格式接口文档