DHT2151AM2301汇编程序教学内容.docx
《DHT2151AM2301汇编程序教学内容.docx》由会员分享,可在线阅读,更多相关《DHT2151AM2301汇编程序教学内容.docx(30页珍藏版)》请在冰豆网上搜索。
![DHT2151AM2301汇编程序教学内容.docx](https://file1.bdocx.com/fileroot1/2022-10/20/96849adc-318a-4c50-b905-964c9e22f9d7/96849adc-318a-4c50-b905-964c9e22f9d71.gif)
DHT2151AM2301汇编程序教学内容
;*********************************************;
;DHT21使用范例
;单片机:
AT89S52或STC89C52RC
;功能;串口发送温湿度数据波特率9600
;硬件连接:
P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑
;*********************************************;
;--------------------
;----变量定义区------
;--------------------
FLAGEQU30H
U8comdataEQU31H
U8T_data_HEQU32H
U8T_data_LEQU33H
U8RH_data_HEQU34H
U8RH_data_LEQU35H
U8checkdataEQU36H
U8tempEQU37H
tempEQU38H
;--------------------
;--------------------
;--------------------
org0000h
AJMPSTART
org0023h
AJMPSET_INT
START:
MOVP0,#0FFH
MOVTMOD,#20H;T1工作方式2
MOVTH1,#0FDH;串口波特率为9600
MOVSCON,#50H;串口工作于方式1并允许接受
SETBTR1;启动T1
SETBES;允许串口中断
SETBEA;允许全部外设中断
MAIN:
;---------------------------
;-----调用湿度读取子程序----
;---------------------------
LCALLRH
;---------------------------
;------串口发送程序--------
;---------------------------
TT:
MOVA,U8RH_data_H
LCALLTX_DATA
MOVA,U8RH_data_L
LCALLTX_DATA
MOVA,U8T_data_H
LCALLTX_DATA
MOVA,U8T_data_L
LCALLTX_DATA
MOVA,U8checkdata
LCALLTX_DATA
//延时两秒
LCALLDelay_2S
LJMPMAIN
;--------------------------------
;-----湿度读取子程序------------
;--------------------------------
;----以下变量均为全局变量--------
;----温度高8位==U8T_data_H------
;----温度低8位==U8T_data_L------
;----湿度高8位==U8RH_data_H-----
;----湿度低8位==U8RH_data_L-----
;----校验8位==U8checkdata-----
;----调用相关子程序如下----------
;----Read,Delay_10us,Delay
;--------------------------------
RH:
;主机拉低总线,延时500us
CLRP2.0
MOVA,#36
LCALLDelay
SETBP2.0
;延时40us
LCALLDelay_10us
LCALLDelay_10us
LCALLDelay_10us
LCALLDelay_10us
;检测从机是否响应,无响应则跳出
JBP2.0,RH_END
MOVFLAG,#0
LOOP1:
INCFLAG
MOVA,FLAG
JBP2.0,LOOP1_END;为高电平则跳出
CJNEA,#0,LOOP1
LJMPRH_END
LOOP1_END:
MOVFLAG,#0
LOOP2:
INCFLAG
MOVA,FLAG
JNBP2.0,LOOP2_END;为低电平则跳出
CJNEA,#0,LOOP2
LJMPRH_END
LOOP2_END:
;进入数据接收阶段
LCALLRead
MOVU8RH_data_H,U8comdata;
LCALLRead
MOVU8RH_data_L,U8comdata;
LCALLRead
MOVU8T_data_H,U8comdata;
LCALLRead
MOVU8T_data_L,U8comdata;
LCALLRead
MOVU8checkdata,U8comdata;
SETBP2.0
;----------------------------------------------------------------------------
;----注意:
本程序没有加校验程序如果用户需要校验请安以下说明编写校验程序-----
;----------------------------------------------------------------------------
;数据传送正确时校验和U8checkdata的值等于
;"8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据"所得结果的末8位
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
RH_END:
RET
;--------------------------------
;---------读数子程序-------------
;--------------------------------
Read:
MOVtemp,#8
MOVU8comdata,#0
LOOP_COM:
;判断低电平是否结束
MOVFLAG,#0
LOOP3:
INCFLAG
MOVA,FLAG
JBP2.0,LOOP3_END;为高电平则跳出
CJNEA,#0,LOOP3
LJMPCOM_END
LOOP3_END:
;----------------------
;CLRP2.1
;SETBP2.1
;----------------------
LCALLDelay_10us
LCALLDelay_10us
LCALLDelay_10us
;----------------------
;CLRP2.1
;SETBP2.1
;----------------------
MOVU8temp,#0
JNBP2.0,HIGH_END
MOVU8temp,#1
HIGH_END:
MOVFLAG,#0
LOOP4:
INCFLAG
MOVA,FLAG
JNBP2.0,LOOP4_END;为低电平则跳出
CJNEA,#0,LOOP4
LJMPCOM_END
LOOP4_END:
MOVA,FLAG
CJNEA,#0,NO_FLAG
LJMPCOM_END
NO_FLAG:
MOVA,U8comdata
RLA
ORLA,U8temp
MOVU8comdata,A
;判断高电平是否结束
DJNZtemp,LOOP_COM
COM_END:
RET
;--------------------------------
;------延时函数-----------------
;--------------------------------
Delay:
MOVR4,A;2.5ms
D1:
MOVR5,#0FFH
DJNZR5,$
DJNZR4,D1
RET
;--------------------------------
;------延时10us函数-----------------
;--------------------------------
Delay_10us:
;10us
NOP
NOP
NOP
NOP
NOP
NOP
RET
;--------------------------------
;------延时2S函数-----------------
;--------------------------------
Delay_2S:
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
MOVA,#250
LCALLDelay
RET
;--------------------------------
;------串口数据发送函数---------
;--------------------------------
TX_DATA:
CLRES;禁止串口中断
MOVSBUF,A
JNBTI,$
CLRTI;将同一数据发送到串口
SETBES;允许串口中断
RET
;--------------------------------
;------串口中断函数-------------
;--------------------------------
SET_INT:
CLRES;禁止串口中断
JNBRI,$
CLRRI
MOVA,SBUF;接受串口数据
MOVP0,A;将串口数据送往P0
MOVSBUF,A
JNBTI,$
CLRTI;将同一数据发送到串口
SETBES;允许串口中断
RETI
END
;--------------------------------
;----------结束------------------
;---------RSBITP3.4
RWBITP3.5
EBITP3.6
D1BITP2.0
D2BITP2.1
D3BITP2.2
IDSBITP2.4
IRWBITP2.5