📄 51_asm_dht21.lst
字号:
A51 MACRO ASSEMBLER 51_ASM_DHT21 12/06/2008 09:01:38 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN 51_asm_DHT21.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 51_asm_DHT21.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*********************************************;
2 ; DHT21使用范例
3 ;单片机 : AT89S52或 STC89C52RC
4 ;功能 ; 串口发送温湿度数据 波特率 9600
5 ;硬件连接: P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX
232连接电脑
6 ;公司 ; 广州奥松电子
7 ;*********************************************;
8
9 ;--------------------
10 ;----变量定义区------
11 ;--------------------
0030 12 FLAG EQU 30H
0031 13 U8comdata EQU 31H
0032 14 U8T_data_H EQU 32H
0033 15 U8T_data_L EQU 33H
0034 16 U8RH_data_H EQU 34H
0035 17 U8RH_data_L EQU 35H
0036 18 U8checkdata EQU 36H
0037 19 U8temp EQU 37H
0038 20 temp EQU 38H
21 ;--------------------
22 ;--------------------
23 ;--------------------
0000 24 org 0000h
0000 0125 25 AJMP START
0023 26 org 0023h
0023 2141 27 AJMP SET_INT
0025 28 START:
0025 7580FF 29 MOV P0,#0FFH
0028 758920 30 MOV TMOD,#20H ;T1工作方式2
002B 758DFD 31 MOV TH1,#0FDH ;串口波特率为9600
002E 759850 32 MOV SCON,#50H ;串口工作于方式1并允许接受
0031 D28E 33 SETB TR1 ;启动T1
0033 D2AC 34 SETB ES ;允许串口中断
0035 D2AF 35 SETB EA ;允许全部外设中断
0037 36 MAIN:
37
38 ;---------------------------
39 ;-----调用湿度读取子程序----
40 ;---------------------------
0037 120059 41 LCALL RH
42 ;---------------------------
43 ;------串口发送程序 --------
44 ;---------------------------
003A 45 TT:
003A E534 46 MOV A,U8RH_data_H
003C 120135 47 LCALL TX_DATA
003F E535 48 MOV A,U8RH_data_L
0041 120135 49 LCALL TX_DATA
0044 E532 50 MOV A,U8T_data_H
0046 120135 51 LCALL TX_DATA
0049 E533 52 MOV A,U8T_data_L
004B 120135 53 LCALL TX_DATA
004E E536 54 MOV A,U8checkdata
0050 120135 55 LCALL TX_DATA
56
57
A51 MACRO ASSEMBLER 51_ASM_DHT21 12/06/2008 09:01:38 PAGE 2
0053 12010C 58 LCALL Delay_2S
59
0056 020037 60 LJMP MAIN
61
62
63 ;--------------------------------
64 ;-----湿度读取子程序 ------------
65 ;--------------------------------
66 ;----以下变量均为全局变量--------
67 ;----温度高8位== U8T_data_H------
68 ;----温度低8位== U8T_data_L------
69 ;----湿度高8位== U8RH_data_H-----
70 ;----湿度低8位== U8RH_data_L-----
71 ;----校验 8位 == U8checkdata-----
72 ;----调用相关子程序如下----------
73 ;---- Read,Delay_10us , Delay
74 ;--------------------------------
0059 75 RH:
76 ;主机拉低总线,延时500us
0059 C2A0 77 CLR P2.0
005B 7424 78 MOV A,#36
005D 1200FD 79 LCALL Delay
0060 D2A0 80 SETB P2.0
81 ;延时40us
0062 120105 82 LCALL Delay_10us
0065 120105 83 LCALL Delay_10us
0068 120105 84 LCALL Delay_10us
006B 120105 85 LCALL Delay_10us
86 ;检测从机是否响应,无响应则跳出
006E 20A040 87 JB P2.0,RH_END
0071 753000 88 MOV FLAG,#0
0074 89 LOOP1:
0074 0530 90 INC FLAG
0076 E530 91 MOV A,FLAG
0078 20A006 92 JB P2.0,LOOP1_END ;为高电平则跳出
007B B400F6 93 CJNE A,#0,LOOP1
007E 0200B1 94 LJMP RH_END
0081 95 LOOP1_END:
0081 753000 96 MOV FLAG,#0
0084 97 LOOP2:
0084 0530 98 INC FLAG
0086 E530 99 MOV A,FLAG
0088 30A006 100 JNB P2.0,LOOP2_END ;为低电平则跳出
008B B400F6 101 CJNE A,#0,LOOP2
008E 0200B1 102 LJMP RH_END
0091 103 LOOP2_END:
104 ;进入数据接收阶段
0091 1200B2 105 LCALL Read
0094 853134 106 MOV U8RH_data_H,U8comdata;
0097 1200B2 107 LCALL Read
009A 853135 108 MOV U8RH_data_L,U8comdata;
009D 1200B2 109 LCALL Read
00A0 853132 110 MOV U8T_data_H,U8comdata;
00A3 1200B2 111 LCALL Read
00A6 853133 112 MOV U8T_data_L,U8comdata;
00A9 1200B2 113 LCALL Read
00AC 853136 114 MOV U8checkdata,U8comdata;
00AF D2A0 115 SETB P2.0
116 ;----------------------------------------------------------------------------
117 ;----注意:本程序没有加校验程序 如果用户需要校验请安以下说明编写校验程序-----
118 ;----------------------------------------------------------------------------
119 ; 数据传送正确时校验和U8checkdata的值等于
120 ; "8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据"所得结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -