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

51单片机汇编实现DHT11读取温湿度

源代码

(先开源,介绍后面再补,考完试有时间再说)

ORG 00HSMGPTR DATA 30HDISDATA DATA 31H//DISDATA: 31H - 36H (DATA Arr)SMGBIN DATA 40HTEMP1 DATA 41HTEMP2 DATA 42HTEMP3 DATA 43HSEC DATA 50HCOUNT1 DATA 51HCOUNT2 DATA 52HCOUNT3 DATA 53HDHT11_TIME_CNT DATA 55HDHT11_BYTE DATA 57H DHT11_BIT DATA 58HDHT11_DATA BIT P1.7DHT11_UPDATE_FLAG DATA 59HDHT11_DATA_ARR DATA 60H //Hum_H Hum_L Tem_H Tem_L Calc//40bit -> 5Byte//60H - 64HLJMP STARTORG 000BHLJMP T0M1_ISRORG 30HSTART:MOV SEC,#0MOV COUNT1,#0MOV COUNT2,#0MOV COUNT3,#0MOV DISDATA+0,#10MOV DISDATA+1,#10MOV DISDATA+2,#10MOV DISDATA+3,#10MOV DISDATA+4,#10MOV DISDATA+5,#10LCALL T0M1_INITMOV DHT11_UPDATE_FLAG,#1LOOP:LCALL DHT11_DATAGETLCALL DISPLAYSJMP LOOPSJMP START/////////////////////////////////////////////////////////DHT11_START:CLR DHT11_DATALCALL DELAY_20MSSETB DHT11_DATALCALL DELAY_40USJNB DHT11_DATA,$JB DHT11_DATA,$//START data Send Finish;LCALL LED_TESTDHT11_START_RET:RETDHT11_READ_BIT:JNB DHT11_DATA,$LCALL DELAY_30USJB DHT11_DATA,DHT11_DHT11_BIT1MOV DHT11_BIT,#0SJMP DHT11_READ_BIT_RETDHT11_DHT11_BIT1:MOV DHT11_BIT,#1JB DHT11_DATA,$DHT11_READ_BIT_RET:RETDHT11_READ:MOV TEMP1,#0  //0-8MOV DHT11_BYTE,#0DHT11_READ_1:MOV A,DHT11_BYTERL ALCALL DHT11_READ_BITADD A,DHT11_BITMOV DHT11_BYTE,AINC TEMP1MOV A,TEMP1CJNE A,#8,DHT11_READ_1DHT11_READ_RET:RETDHT11_DATAGET:MOV A,DHT11_UPDATE_FLAGCJNE A,#1,DHT11_DATAGET_RETMOV DHT11_UPDATE_FLAG,#0;LCALL DELAY_1SLCALL DHT11_STARTLCALL DHT11_READMOV A,DHT11_BYTEMOV B,#10DIV ABMOV DISDATA+0,AMOV DISDATA+1,BLCALL DHT11_READLCALL DHT11_READMOV A,DHT11_BYTEMOV B,#10DIV ABMOV DISDATA+4,AMOV DISDATA+5,BLCALL DHT11_READDHT11_DATAGET_RET:RET///////////////////////////////////////////////////////////TIMER0 MODE1T0M1_INIT:MOV TMOD,#01HMOV TH0,#(65535-50000)/256MOV TL0,#(65535-50000)MOD 256SETB EASETB ET0SETB TR0RETT0M1_ISR:MOV TH0,#(65535-50000)/256MOV TL0,#(65536-50000)MOD 256INC COUNT1MOV A,COUNT1CJNE A,#4,T0M1_NEXT   //50ms*4=200msMOV COUNT1,#0INC COUNT2MOV A,COUNT2CJNE A,#5,T0M1_NEXT	//200ms*5=1sMOV COUNT2,#0INC DHT11_TIME_CNTMOV A,DHT11_TIME_CNTCJNE A,#3,T0M1_ISR_1MOV DHT11_TIME_CNT,#0MOV DHT11_UPDATE_FLAG,#1T0M1_ISR_1:INC SECMOV A,SECCJNE A,#100,T0M1_NEXTMOV SEC,#0T0M1_NEXT:RETI/////////////////////////////////////////////////////////DISPLAY:MOV SMGBIN,#01111111BMOV SMGPTR,#0DIS1:MOV A,SMGBINRL AMOV SMGBIN,AMOV P2,SMGBIN	//BIT CHOICEMOV A,SMGPTRADD A,#DISDATAMOV R0, AMOV TEMP1,@R0  //DATA CHOICEMOV DPTR,#TABMOV A,TEMP1MOVC A,@A+DPTRMOV P0,ALCALL DELAY_1MSINC SMGPTRMOV A,SMGPTRCJNE A,#6,DIS1RET/////////////////////////DELAY_1MS:MOV R5,#2         DELAY3:MOV R6,#248      DELAY2:DJNZ R6,DELAY2 DJNZ R5,DELAY3   RET               ////////////////////////DELAY_20MS:MOV R4,#20DELAY_20MS_1:LCALL DELAY_1MSDJNZ R4,DELAY_20MS_1RET////////////////////////DELAY_20US:MOV R7,#9DELAY_20US_1:DJNZ R7,DELAY_20US_1RET//////////////////////////DELAY_30US:MOV R7,#13DELAY_30US_1:DJNZ R7,DELAY_30US_1RET////////////////////////DELAY_40US:MOV R7, #19      DELAY_40US_1:DJNZ R7, DELAY_40US_1   RET              ////////////////////////DELAY_3S:MOV R3,#30DELAY_3S_2:MOV R4,#100DELAY_3S_1:LCALL DELAY_1MSDJNZ R4,DELAY_3S_1DJNZ R3,DELAY_3S_2RET////////////////////////DELAY_1S:MOV R3,#10DELAY_1S_2:MOV R4,#100DELAY_1S_1:LCALL DELAY_1MSDJNZ R4,DELAY_1S_1DJNZ R3,DELAY_1S_2RET////////////////////////LED_TEST:MOV R0,#100LED_TEST_1:CLR P1.1;CLR P1.1;LCALL DELAY_20MS;SETB P1.1;LCALL DELAY_20MS;DJNZ R0,LED_TEST_1RET///////////////////////TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END

电路图

下面是DHT11部分的函数

DHT11_START是起始信号发送函数

DHT_READ_BIT是读取一bit位的函数

DHT_READ是读取一字节(8bit)的函数

DHT_DATAGET是样例函数,要放在主循环里面跑的,但是不会一直调用,要调用MOV DHT11_UPDATE_FLAG,#1才会刷新一次,我把这个放在了定时器里面,数据手册里面说大概要2s调用一次,我这里就是3s调用一次,调用一次就会刷新一次

	DHT11_START:CLR DHT11_DATALCALL DELAY_20MSSETB DHT11_DATALCALL DELAY_40USJNB DHT11_DATA,$JB DHT11_DATA,$//START data Send Finish;LCALL LED_TESTDHT11_START_RET:RETDHT11_READ_BIT:JNB DHT11_DATA,$LCALL DELAY_30USJB DHT11_DATA,DHT11_DHT11_BIT1MOV DHT11_BIT,#0SJMP DHT11_READ_BIT_RETDHT11_DHT11_BIT1:MOV DHT11_BIT,#1JB DHT11_DATA,$DHT11_READ_BIT_RET:RETDHT11_READ:MOV TEMP1,#0  //0-8MOV DHT11_BYTE,#0DHT11_READ_1:MOV A,DHT11_BYTERL ALCALL DHT11_READ_BITADD A,DHT11_BITMOV DHT11_BYTE,AINC TEMP1MOV A,TEMP1CJNE A,#8,DHT11_READ_1DHT11_READ_RET:RETDHT11_DATAGET:MOV A,DHT11_UPDATE_FLAGCJNE A,#1,DHT11_DATAGET_RETMOV DHT11_UPDATE_FLAG,#0;LCALL DELAY_1SLCALL DHT11_STARTLCALL DHT11_READMOV A,DHT11_BYTEMOV B,#10DIV ABMOV DISDATA+0,AMOV DISDATA+1,BLCALL DHT11_READLCALL DHT11_READMOV A,DHT11_BYTEMOV B,#10DIV ABMOV DISDATA+4,AMOV DISDATA+5,BLCALL DHT11_READDHT11_DATAGET_RET:RET

http://www.dtcms.com/a/593610.html

相关文章:

  • LiveCharts.Wpf 控件的使用
  • 柔性软风管-测量统计一键出量
  • 告别手动录财报!财务报表OCR识别解决方案选型指南
  • (128页PPT)智慧化工厂区一体化管理平台建设方案(附下载方式)
  • jsp网站建设项目实战总结怎么做网站统计
  • 【Rust 探索之旅】Rust 全栈 Web 开发实战:从零构建高性能实时聊天系统
  • 【Rust 探索之旅】Tokio 异步运行时完全指南:深入理解 Rust 异步编程与源码实现
  • 个人网站做经营性crm销售管理系统功能
  • Ubuntu 22.04 Docker 安装指南
  • C++基础语法篇二 ——引用、内联和空指针
  • 有没有做兼职的好网站十堰网络公司排名
  • vscode中claude code插件代理地址设置
  • 网页制作与网站管理在线销售管理系统
  • 如何使用 vxe-table 实现右键菜单异步权限控制
  • 11月10日学习总结--初识numpy
  • 前后端通信加解密(Web Crypto API )
  • 基于数字图像相关(DIC)技术的机械臂自动化焊接残余应力全场变形高精度测量
  • XTOM-TRANSFORM-ROB:面向大尺寸构件的移动式非接触三维扫描与自动化质量检测
  • PyWinInspect:pywinauto 桌面自动化开发伴侣,集成 Inspect 元素检查 + 定位代码自动生成,效率大提升!
  • 个人做什么网站软件技术专升本难吗
  • HarmonyOS:ArkUI栅格布局系统(GridRow/GridCol)
  • 电商设计师常用的网站wordpress 获取分类地址
  • 开放签电子签章系统3.2版本更新内容
  • 电子商务的网站建设过程辽宁沈阳网站建设
  • C++ 设计模式《统计辅助功能》
  • 【技术分享】ComfyUI中protobuf版本兼容性问题的优雅解决方案:猴子补丁实战
  • Redis 高级篇(未完结1/3)
  • 华为OD机试 真题 - 【国际移动用户识别码(IMSI)匹配】 - 双机位A卷 (Python C++ JAVA JS GO)
  • 自动更新工期触发器(MYSQL)
  • 企业网站建设的方式有哪些方式网页设计版权怎么写