找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2117|回复: 9
收起左侧

新人报到 有个问题请教一下

[复制链接]
ID:137704 发表于 2016-9-2 08:26 | 显示全部楼层 |阅读模式
;湿度传感器 延时测量才可
;湿度完成

;DHT11 -STC12C5204
;MCU -11.0592M
;I/0 P1.7-P1.0 LED(D7-D0) /A B F G D E C H
                          ;7 6 5 4 3 2 1 0

;P2.7(O) LED(K0)
;P2.6(O) LED(K1)

;P3.7(O) JDQ L=OFF H=ON
;P2.1(O) FAN L=OFF H=ON

;P3.4 DHT11

  FLAG        EQU 30H
  U8comdata   EQU 31H

  U8T_data_H  EQU 32H
  U8T_data_L  EQU 33H

  U8RH_data_H EQU 34H
  U8RH_data_L EQU 35H
  U8checkdata EQU 36H
  U8temp      EQU 37H
  temp        EQU 38H

  ADDROM      EQU 39H ;湿度偏差
  WDRAM       EQU 3AH ;温度值
  WDRAM1      EQU 3BH ;测量值

  DT11_P    BIT   P3.4
  LED1_P    BIT   P2.6
  LED0_P    BIT   P2.7
  FEN_P     BIT   P2.1
  JDQ_P     BIT   P3.7

BITRM      BIT  2DH.0
WD_BIT     BIT  2DH.1
TIME_BIT   BIT  2DH.2 ;时间是否计时
LED_BIT    BIT  2DH.3
OUT0_BIT   BIT  2DH.4 ;制湿 L=有效
OUT1_BIT   BIT  2DH.5 ;风扇 L=有效


S1_BIT     BIT  2EH.0 ;制湿启动
S2_BIT     BIT  2EH.1 ;制湿停止
S3_BIT     BIT  2EH.2 ;风扇控制

TMIN   EQU   40H
MIN    EQU   41H
FEN    EQU   42H

RAM0   EQU   43H
RAM1   EQU   44H


SPROM  EQU  60H
;ROM
SDMAX    EQU  50  ;湿度上限
SDMIN    EQU  40  ;湿度下限
RUNTIME  EQU  120 ;>50工作时间
STOPTIME EQU  10  ;停止时间
FENTIME  EQU  1   ;风扇时间
WDPK     EQU  20  ;温度判断
;==========================================================================
                   ORG   0000H
                   LJMP  START
                   ORG   0003H
                   RETI
                   ORG   000BH ;时间记数
                   LJMP  INCTIME
                   RETI
                   ORG   0013H
                   RETI
                   ORG   001BH
                   RETI
                   ORG   0023H
                   RETI
                   ORG   002BH
                   RETI
                   ORG   0040H
;=================================================
START:        CLR   FEN_P
              CLR   JDQ_P
              CLR   EA

              MOV   R0,#7FH
START1:       MOV   @R0,A
              DJNZ  R0,START1
              MOV   SP,#SPROM
              MOV   97H,#0;分频比


              MOV   TL0,#0B2H
              MOV   TH0,#0ECH

              MOV   TMIN,#00H ;1/5S
              MOV   MIN,#00H  ;1S
              MOV   FEN,#00H ;

              MOV   TMOD,#01H
              CLR  TIME_BIT

              SETB  ET0
              SETB  TR0
              SETB  EA

              SETB  OUT0_BIT ;
              SETB  OUT1_BIT

              MOV   RAM0,#0BDH  ;
              MOV   RAM1,#011H ;0BDH ;显示标题

              MOV   A,#54H
              CALL  DELA ;延时2S

              CLR   A
              MOV   DPTR,#SDADDROM
              MOVC  A,@A+DPTR
              ANL   A,#0F0H
              SWAP  A
              MOV   B,#10
              MUL   AB
              MOV   B,A
              CLR   A
              MOV   DPTR,#SDADDROM
              MOVC  A,@A+DPTR
              ANL   A,#0FH
              ADD   A,B
              MOV   ADDROM,A
              MOV   WDRAM,#14H


              CLR   S1_BIT
              CLR   S2_BIT
              CLR   S3_BIT

TZ0:          LCALL RH
              JNB   WD_BIT, TZ0
              CLR   WD_BIT
              MOV   A,U8RH_data_H
              MOV   WDRAM,A


TZ1:          LCALL  RH  ;调用湿度读取子程序
              JNB   WD_BIT, TZ1
              CLR   WD_BIT

             ;MOV   A,U8T_data_H ;温度
              MOV   A,U8RH_data_H
              ADD   A,WDRAM
              CLR   C
              RRC   A
              MOV   WDRAM,A

              ADD   A,ADDROM
              MOV   WDRAM1,A

              CJNE  A,#99,PKWD
PKWD:         JC   PKWD1
              MOV   WDRAM1,#99;>=99

PKWD1:        MOV   A,WDRAM1
              MOV   B,#10
              DIV   AB
              CLR   C
              MOV   DPTR,#LEDTAB
              MOVC  A,@A+DPTR
              MOV   RAM1,A

              MOV   A, B
              MOVC  A,@A+DPTR
              MOV   RAM0,A

;*************************************************
;测量完成
;*************************************************
              JB    S1_BIT,PDWK2 ;进入第一状态(制湿120分钟
              JB    S3_BIT,PDWK4 ;进入第三状态(风扇启动
              JB    S2_BIT,PDWK5 ;进入第二状态(均停止

              MOV   A,WDRAM1
              CJNE  A,#SDMAX,PDWK1  ;湿度上限
PDWK1:        JC    PDWK3
              ;>50
              JB    S1_BIT,PDWK2
              SETB  S1_BIT   ;首次启动
              MOV   TMIN,#00H
              MOV   MIN,#00H
              MOV   FEN,#00H
              SETB  TIME_BIT
              CLR   OUT0_BIT
              CLR   OUT1_BIT

;*************************************************
;第一状态制湿120分钟
;*************************************************              
PDWK2:        MOV   A,FEN  
              CJNE  A,#RUNTIME,PDWK21
PDWK21:       JC    ITEMEND ;<120 时间未到退出
              ;>=120
              CLR   S1_BIT
              SETB  OUT0_BIT ;制湿停止
              MOV   TMIN,#00H
              MOV   MIN,#00H
              MOV   FEN,#00H

              MOV   A,U8T_data_H ;温度 >20
              CJNE  A,#WDPK,PDWK22
PDWK22:       JC    PDWK23
              ;温度>20  
              SETB  S3_BIT
              CLR   OUT1_BIT
              JMP   ITEMEND

PDWK23:       ;温度<20
              SETB  OUT1_BIT ;风扇停止
              SETB  S2_BIT   ;进入停止十分钟   
              JMP   ITEMEND
;*************************************************

PDWK3:         ;湿度<50      
               MOV   A,WDRAM1
               CJNE  A,#SDMIN,PDWK31  ;湿度下限
PDWK31:        JNC   PDWK32
               ;<40
               CLR  S1_BIT
               CLR  S2_BIT
               CLR  S3_BIT
               SETB  OUT0_BIT ;制湿停止
               SETB  OUT1_BIT ;风扇停止
               CLR   TIME_BIT ;时间停止
PDWK32:        NOP ;湿度>=40
               JMP   ITEMEND

;=================================================
;第三状态(风扇启动
;=================================================
PDWK4:        MOV   A,FEN  
              CJNE  A,#FENTIME,PDWK41
PDWK41:       JC    PDWK4E
              ;>=FENTIME
              SETB  OUT0_BIT ;制湿停止
              SETB  OUT1_BIT ;风扇停止
              CLR   S1_BIT
              CLR   S3_BIT
              SETB  S2_BIT
PDWK4E:       JMP   ITEMEND              

;=================================================
;第二状态(均停止
;=================================================
PDWK5:        MOV   A,FEN  
              CJNE  A,#STOPTIME,PDWK51
PDWK51:       JC    PDWK5E
              ;>=STOPTIME
              SETB  OUT0_BIT ;制湿停止
              SETB  OUT1_BIT ;风扇停止
              CLR   S1_BIT
              CLR   S3_BIT
              CLR   S2_BIT
PDWK5E:       JMP   ITEMEND              
;=================================================

;=================================================
ITEMEND:       MOV   C,OUT0_BIT
               CPL   C
               MOV   JDQ_P,C

               MOV   C,OUT1_BIT
               CPL   C
               MOV   FEN_P,C
               MOV   A,#30
               CALL  DELA ;延时2S
               JMP   TZ1                              

;=================================================
INCTIME: PUSH  PSW     ;895us
         PUSH  ACC
         MOV   PSW,#08H ;R0/7 <->08/FH
         MOV   TL0,#0B2H
         MOV   TH0,#0ECH

         MOV   P1,#0FFH
         CPL   LED_BIT
         JB    LED_BIT,XS2
         SETB  LED0_P
         CLR   LED1_P
         MOV   A,RAM1
         LJMP  XS3

XS2:     SETB  LED1_P
         CLR   LED0_P
         MOV   A,RAM0
         MOV   C,OUT0_BIT
         MOV   ACC.0,C
XS3:     MOV   P1,A


         INC   R0
         CJNE  R0,#0E0H,INCTMEND
         MOV   R0,#00H     ;0.2S
         JNB   TIME_BIT,INCTMEND
         INC   TMIN ;0.2秒
         MOV   A,TMIN
         CJNE  A,#05H,INCTMEND
         MOV   TMIN,#00H ;1s
         INC   MIN
         MOV   A,MIN
         CJNE  A,#60,INCTMEND ;=60S
         MOV   MIN,#00H
         INC   FEN     ;1分钟

INCTMEND:POP   ACC
         POP   PSW
         RETI


RH:     ;CLR   EA
        CLR   DT11_P
        MOV   A,#01H
        CALL  DELA
        ;MOV   A,#036;36
        ;LCALL Delay
        SETB  DT11_P
        ;NEXT DELAY 40us TOO
        ;MOV   A,#02;36
        ;CALL Delay
        LCALL Delay_10us
        LCALL Delay_10us
        LCALL Delay_10us
        LCALL Delay_10us
        ;check dht11 reply
        JB    DT11_P,RH_END
        CLR   EA
        ;MOV   A,RAM1
        ;SETB  ACC.0
        ;MOV   RAM1,A

        MOV   FLAG,#0
        NOP
        ;CLR   P1.0
LOOP1:  INC   FLAG
        MOV   A,FLAG
        JB    DT11_P,LOOP1_END
        CJNE  A,#0,LOOP1
        LJMP  RH_END
LOOP1_END:
        MOV  FLAG,#0
LOOP2:
        INC  FLAG
        MOV  A,FLAG
        JNB  DT11_P,LOOP2_END
        CJNE A,#0,LOOP2
        LJMP RH_END
LOOP2_END:
        NOP
        ;CLR P1.1
       ;进入数据接收阶段
        LCALL Read
        MOV   U8RH_data_H,U8comdata;
        LCALL Read
        MOV   U8RH_data_L,U8comdata;
        LCALL Read
        MOV   U8T_data_H,U8comdata;
        LCALL Read
        MOV   U8T_data_L,U8comdata;
        LCALL Read
        MOV   U8checkdata,U8comdata;
        SETB  DT11_P

        ;MOV P1,#0FFH
        MOV  A,U8RH_data_H
        ADD  A,U8RH_data_L
        ADD  A,U8T_data_H
        ADD  A,U8T_data_L
        CJNE A,U8checkdata,RH_END
        SETB  WD_BIT
        SETB  EA
        RET

RH_END: NOP
       ;LCALL display
       ;JMP RH
        SETB  EA
        RET
;   RET


;--------------------------------
;---------读数子程序-------------
;--------------------------------
Read:       MOV temp,#8
            MOV U8comdata,#0
LOOP_COM:   ;判断低电平是否结束
            MOV  FLAG,#0
LOOP3:      INC  FLAG
            MOV  A,FLAG
            JB  DT11_P,LOOP3_END  ;为高电平则跳出
            CJNE A,#0,LOOP3
            LJMP COM_END
LOOP3_END:  ;----------------------
            ;CLR    P2.1
            ;SETB   P2.1
            ;----------------------
            LCALL Delay_10us
            LCALL Delay_10us
            LCALL Delay_10us
           ;----------------------
            ;CLR    P2.1
            ;SETB   P2.1
           ;----------------------
           MOV   U8temp,#0
           JNB    DT11_P,HIGH_END   ;if DT11_P is zero just jmp to HIGH_ENG
           MOV   U8temp,#1
HIGH_END:  MOV  FLAG,#0
LOOP4:     INC  FLAG
           MOV  A,FLAG
           JNB DT11_P,LOOP4_END  ;为低电平则跳出
           CJNE A,#0,LOOP4
           LJMP COM_END
LOOP4_END: MOV  A,FLAG
           CJNE  A,#0,NO_FLAG
           LJMP  COM_END
NO_FLAG:   MOV A,U8comdata
           RL  A       ;loop left one bits << a
           ORL A,U8temp         ; or a an
           MOV U8comdata,A
           ;判断高电平是否结束
           DJNZ temp,LOOP_COM
COM_END:   RET
;--------------------------------
;------延时函数 -----------------
;--------------------------------
Delay:  MOV R4,A
DL:     MOV R5,#0FFH
        DJNZ R5,$
        DJNZ R4,DL
        RET

DELA:   MOV R5,A
DL1:    MOV R6,#0D0H
DL2:    MOV R7,#0FFH
        DJNZ R7,$
        DJNZ R6,DL2
        DJNZ R5,DL1

        RET


;--------------------------------
;------延时10us函数 -------------
;--------------------------------
Delay_10us:
         ;NOP
         ;NOP
         ;NOP
         ;NOP
         ;NOP
         ;NOP
         MOV R7,#30
         DJNZ R7,$
         RET
;--------------------------------


;==========================================================================
LEDTAB: DB        011H;0
        DB        0BDH;1
        DB        023H;2
        DB        025H;3
        DB        08DH;4
        DB        045H;5
        DB        041H;6
        DB        03DH;7
        DB        001H;8
        DB        005H;9
        DB        009H;A
        DB        0C1H;b
        DB        053H;C
        DB        0A1H;d
        DB        043H;E
        DB        04BH;F
        DB        0FFH;空白
;==========================================================================
        ORG   03EFH
        DB    00H
;==========================================================================
        ORG   03FFH
SDADDROM:     DB  20H ; 十进制


这么一大段是干嘛用的 有附件 哪位大神能帮我注释一下 万分感谢

rty543.zip

14.08 KB, 下载次数: 4

压缩包

回复

使用道具 举报

ID:138155 发表于 2016-9-2 11:06 | 显示全部楼层
根据AD值查温度 然后控制风扇
回复

使用道具 举报

ID:137704 发表于 2016-9-5 07:32 | 显示全部楼层
wuyibin2003 发表于 2016-9-2 11:06
根据AD值查温度 然后控制风扇

这个是用汇编程序写的吧?能私信下你的联系方式吗?
回复

使用道具 举报

ID:123289 发表于 2016-9-5 11:01 | 显示全部楼层
主要是需要一点时间,如果有时间可以帮帮你。
回复

使用道具 举报

ID:138155 发表于 2016-9-10 15:53 | 显示全部楼层
溧阳科燕 发表于 2016-9-5 07:32
这个是用汇编程序写的吧?能私信下你的联系方式吗?

是汇编语言写的 学过的可以看得懂一点 没有学过的估计就像看天书一样 汇编的程序不加注释很难看懂 如果不完整的程序更加难懂了
回复

使用道具 举报

ID:139032 发表于 2016-9-10 16:18 | 显示全部楼层
复杂的程程序还是用C好,汇编不加注释确实比较难分析
回复

使用道具 举报

ID:139038 发表于 2016-9-10 16:59 | 显示全部楼层
汇编。。。
回复

使用道具 举报

ID:139191 发表于 2016-9-12 15:40 | 显示全部楼层
看得懂一点 没有学过的估计就像看天书一样 汇编的程序不加注释很难看懂 如果不完整的程序更加难懂了
回复

使用道具 举报

ID:139197 发表于 2016-9-12 15:57 | 显示全部楼层
OK....
回复

使用道具 举报

ID:139216 发表于 2016-9-12 17:18 | 显示全部楼层
汇编语言不会编,学起来感觉像天书,c语言还是最实用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表