⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 温控程序.asm

📁 51单片机控制1820工作并且实时控制现场温度
💻 ASM
📖 第 1 页 / 共 2 页
字号:

   ZHENGSHU EQU 57H        ;温度整数
    XIAOSHU EQU 58H        ;温度小数
      TEMPH EQU 59H        ;设定温度上限值(BCD)
     TEMPH1 EQU 4DH        ;键盘设定温度值(16进制)
        WD1 EQU 33H        ;温度十位
        WD2 EQU 32H        ;温度个位
        WD3 EQU 31H        ;温度十分位
        WD4 EQU 30H        ;温度百分位
         DQ BIT P1.4       ;温度数据入口
        SDA BIT P1.3       ;时间数据传送
        SCK BIT P1.2       ;时钟控制状态
   ALMONHOU EQU 5AH        ;定时开小时寄存器
   ALMONMIN EQU 5BH        ;定时开分钟寄存器
  ALMOFFHOU EQU 5CH        ;定时关小时寄存器
  ALMOFFMIN EQU 5DH        ;定时关分钟寄存器
      FLAG1 EQU 34H        ;DS18B20的标志位
        SEC EQU 35H        ;秒寄存器
        MIN EQU 36H        ;分寄存器
        HOU EQU 37H        ;时寄存器
        DAY EQU 38H        ;日寄存器
       WEEK EQU 39H        ;星期寄存器
        MON EQU 3AH        ;月寄存器
        YEA EQU 3BH        ;年寄存器
      QJDZH EQU 3CH        ;时钟芯片地址
      ZJDZH EQU 3DH        ;字节地址
     NUMBYT EQU 4FH        ;数据字节数
        MRD EQU 60H        ;读出数据缓冲区首地址
       EPDA EQU 40H        ;发送单个数据缓冲区
      FLAG2 EQU 4CH        ;外部中断标志位
         ORG 0000H
         AJMP MAIN
         ORG 000BH
         LJMP TT0
         ORG 0013H
         LJMP INT1
         ORG 001BH
         LJMP TT1
         ORG 0030H
;主程序
;**************************************************************
MAIN:    MOV 5AH,#20H
         MOV 5BH,#40H
         MOV 5CH,#20H
         MOV 5DH,#41H
         MOV 37H,#20H
         MOV 36H,#40H
         MOV 35H,#40H
         MOV 59H,#25
         LCALL SEND8563
MAIN1:   MOV SP,#70H
         MOV TMOD,#11H
         MOV TH0,#63H
         MOV TL0,#0C0H
         MOV TH1,#3CH
         MOV TL1,#0B0H
         SETB ET0
         SETB TR1
         SETB TR0
         SETB ET1
         SETB EX1
         SETB PX1
         SETB IT1
         SETB EA
         LCALL GETTIME
         LCALL GETTEMP
         ;LCALL DISPTEMP
         ;LCALL DELAY1
         SJMP MAIN1

TT0:     PUSH ACC
         PUSH PSW
         MOV TH0,#63H
         MOV TL0,#0C0H
         CLR C
         MOV A,57H
         CJNE A,59H,N1
      N1:JC N2
         CLR P1.5
         SJMP T0RT
      N2:SETB P1.5
    T0RT:POP PSW
         POP ACC
         RETI

TT1:     PUSH ACC
         PUSH PSW
         MOV TH1,#3CH
         MOV TL1,#0B0H
         CLR C
         MOV A,5AH
         CJNE A,5CH,CP1
         LJMP CP2
     CP1:CLR C
         MOV A,5AH
         CJNE A,5CH,J1
      J1:JNC J2     ;TON>TOFF
         LJMP N5    ;TON<TOFF
      J2:MOV A,HOU
         CJNE A,5CH,J3
      J3:JNC J4
         SETB TR0
         LJMP T1RT
      J4:CJNE A,5CH,J5
         CLR C
         MOV A,MIN
         CJNE A,5DH,J6
      J6:JNC J7
         SETB TR0
         LJMP T1RT
      J7:CLR TR0
         LJMP T1RT
      J5:CLR C
         MOV A,HOU
         CJNE A,5AH,J8
      J8:JNC J9
         CLR TR0
         LJMP T1RT
      J9:CJNE A,5AH,J12
         CLR C
         MOV A,MIN
         CJNE A,5BH,J11
     J11:JNC J12
         CLR TR0
         LJMP T1RT
     J12:SETB TR0
         LJMP T1RT        
;************************************                     
     CP2:CLR C
         MOV A,5BH
         CJNE A,5DH,CP4
     CP4:JNC NY1
         LJMP NX1

     NY1:CLR C
         MOV A,HOU
         CJNE A,5AH,T1RT1
        ;CLR C
         MOV A,MIN
         CJNE A,5DH,CP5
     CP5:JNC CP6
         SETB TR0
         LJMP T1RT
     CP6:CJNE A,5BH,CP7
     CP7:JNC CP8
         CLR TR0
         LJMP T1RT
     CP8:SETB TR0
         LJMP T1RT

     NX1:CLR C
         MOV A,HOU
         CJNE A,5AH,T1RT1
         SJMP B2
   T1RT1:LJMP T1RT
      B2:;CLR C
         MOV A,MIN
         CJNE A,5BH,CP9
     CP9:JNC CP10
         CLR TR0
         LJMP T1RT
    CP10:CJNE A,5DH,CP11
    CP11:JNC CP12
         SETB TR0
         LJMP T1RT
    CP12:CLR TR0
         LJMP T1RT

    ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ;TON<TOFF  TON<T<TOFF--ON
    ;IF HOU>=TON,则先判断二者是否相等,若相等则比较分钟,min大,则开
    ;若hou>ton,则判断是否小于TOFF,若小于则开,若大于等于TOFF,则先判
    ;段是否等于,若等于,则判断分钟大小;若大于则关
      N5:CLR C
         MOV A,HOU
         CJNE A,5AH,N14
     N14:JNC N15          ;HOU>=5AH
         CLR TR0          ;OPEN
         LJMP T1RT
     N15:MOV A,MIN
         CJNE A,5BH,N16
     N16:JNC N17          ;MIN>=5DH
         SETB TR0
         LJMP T1RT
     N17:CLR C
         MOV A,HOU
         CJNE A,5AH,N18
     N18:JNC N19          ;HOU>=5AH
         CLR TR0
         LJMP T1RT
     N19:MOV A,MIN
         CJNE A,5BH,N20
     N20:JNC N21          ;MIN>=5BH
         CLR TR0
         LJMP T1RT
     N21:SETB TR0
         LJMP T1RT
    T1RT:POP PSW
         POP ACC
         RETI
INT1:                   ;键盘锁定(NumLock)
         POP ACC
         POP PSW
         JB FLAG2,T3   ;MOV A,3EH
         CLR FLAG2      ;INC A
         CLR P1.6
      T1:LCALL JZKEY    ;MOV 3EH,A
         SJMP T1              ;JNB ACC.0,T3
                       ;CLR P1.6
                       ;T1:LCALL JZKEY
                       ;SJMP T1
      T3:SETB FLAG2
         SETB P1.6
         POP PSW
         POP ACC
         RETI
GETTIME:
         PUSH ACC
         PUSH PSW
         LCALL READTIME
         LCALL DISPTIME
         POP PSW
         POP ACC
         RET
GETTEMP:
         PUSH ACC
         PUSH PSW

         LCALL INIT_1820     ;调用复位DS18B20子程序
         JB   FLAG1,TE1      ;判断DS18B20是否连接正常
         LCALL DISPERRO      ;显示错误信息
         SJMP  TE2
     TE1:LCALL GET_TEMPER    ;调用读温度子程序
         LCALL WENDUZH       ;调用温度转换子程序
        ;LCALL DELAY1        ;调用延时0.5s子程序
         POP PSW
         POP ACC
     TE2:RET
;PCF8583操作子程序
;*****************************************************************
 SEND8563:
        Lcall dy100ms
        MOV   QJDZH,#0A2H   ;设置系统时间
        mov   zjdzh,#02h
        mov   epda,SEC
        LCALL wrep1b
        MOV   QJDZH,#0A2H
        mov   zjdzh,#03h
        mov   epda,MIN
        LCALL wrep1b
        MOV   QJDZH,#0A2H
        mov   zjdzh,#04h
        mov   epda,HOU
        LCALL wrep1b
        MOV   QJDZH,#0A2H
        mov   zjdzh,#05h
        mov   epda,DAY
        LCALL wrep1b
        MOV   QJDZH,#0A2H
        mov   zjdzh,#07h
        mov   epda,MON
        LCALL wrep1b
        MOV   QJDZH,#0A2H
        mov   zjdzh,#08h
        mov   epda,YEA
        LCALL wrep1b
        Lcall dy100ms
        ret


READTIME:
        MOV   QJDZH,#0A2H    ;读实时时间      60h........
        MOV   ZJDZH,#02H
        MOV   NUMBYT,#08H    ;8个数据
        LCALL RDNBYT
        mov   a,60h
        anl   a,#7fh
        mov   SEC,a
        mov   a,61h
        anl   a,#7fh
        mov   MIN,a
        mov   a,62h
        anl   a,#3fh
        mov   HOU,a
        mov   a,63h
        anl   a,#3fh
        mov  DAY,a
        mov   a,65h
        anl   a,#1fh
        mov   MON,a
        mov   a,66h
        anl   a,#0FFh
        mov   YEA,a
        ret


     ;###############################i2c总线协议
     STA:SETB  SDA
	SETB  SCK
	NOP
        NOP

	CLR   SDA
	NOP
        NOP

	CLR   SCK
	RET
   STOP:CLR   SDA
	SETB  SCK
	NOP
        NOP

	SETB  SDA
	NOP
        NOP

	CLR   SCK
	RET
   SACK:CLR   SDA
	SETB  SCK
	NOP
        NOP

	CLR   SCK
	SETB  SDA
	RET

  SNACK:SETB  SDA
	SETB  SCK
	NOP
        NOP

	CLR   SCK
	CLR   SDA
	RET

   CACK:SETB  SDA
	SETB  SCK
	CLR   F0
        mov   c,sda
        jnc   cend
        SETB  F0
   CEND:CLR   SCK
	NOP
	NOP
	RET

  WRBYT:MOV   R7,#8
    WLP:RLC   A
	JC    WR1
	LJMP  WR0
   WLP1:DJNZ  R7,WLP
	RET
    WR1:SETB  SDA
	SETB  SCK
	NOP
	NOP
	CLR   SCK
	CLR   SDA
	LJMP  WLP1
    WR0:CLR   SDA
	SETB  SCK
	NOP
	NOP
	CLR   SCK
	LJMP  WLP1

  RDBYT:MOV   R7,#8
    RLP:SETB  SDA
	SETB  SCK
        MOV   C,SDA
        MOV   A,EPDA
        RLC   A
        MOV   EPDA,A
	NOP
	CLR   SCK
	NOP
	DJNZ  R7,RLP
	RET




 WREP1B:LCALL  STA
	MOV   A,QJDZH
	LCALL WRBYT
	LCALL CACK
	JB    F0,WREP1B
	MOV   A,ZJDZH
	LCALL WRBYT
	LCALL CACK
	JB    F0,WREP1B
	MOV   A,EPDA
	LCALL WRBYT
	LCALL CACK
	JB    F0,WREP1B
	LCALL STOP
        LCALL DY10MS
	RET




 RDNBYT:LCALL STA
	MOV   A,QJDZH
	LCALL WRBYT
	LCALL CACK
	JB    F0,RDNBYT
	MOV   A,ZJDZH
	LCALL WRBYT
	LCALL CACK
	JB    F0,RDNBYT
	LCALL STA
	MOV   A,QJDZH
        INC   A
	LCALL WRBYT
	LCALL CACK
	JB    F0,RDNBYT
	MOV   R1,#MRD
   RDN1:LCALL RDBYT
	MOV   @R1,A
	DJNZ  NUMBYT,ACK
	LCALL SNACK
	LCALL STOP
	RET

    ACK:LCALL SACK
	INC   R1
	LJMP  RDN1



;键盘扫描子程序
;****************************************************************
JZKEY:
    PUSH ACC
    PUSH PSW
 RS:MOV P0,#0F0H
    MOV A,P0
    CPL A
    ANL A,#0F0H
    MOV R1,A
    JZ RS            ;无键按下继续扫描
    MOV P0,#0FH
    MOV A,P0
    CPL A
    ANL A,#0FH
    MOV R2,A
    JZ RS
    LCALL DELAY2
WAIT:
    MOV A,P0
    CPL A
    ANL A,#0FH
    JNZ WAIT
    MOV A,R1
    MOV R1,#03H
    MOV R3,#04H
    CLR C
JZKEY2:
    RLC A
    JC JZKEY3
    DEC R1
    DJNZ R3,JZKEY2
    RET
JZKEY3:
    MOV A,R2
    MOV R2,#00H
    MOV R3,#04H
    CLR C
JZKEY4:
    RRC A
    JC JZKEY5
    INC R2
    DJNZ R3,JZKEY4
JZKEY5:
    MOV A,R2
    CLR C
    RLC A
    RLC A
    ADD A,R1
    CLR C
;*****************************
       CJNE A,#10,JK1
   JK1:JNC JK2
       MOV 3FH,A
       ;SJMP JKRT
       RET
   JK2:CJNE A,#11,JK3
   JK3:JNC JK4
       LJMP KEY10
   JK4:CJNE A,#12,JK5
   JK5:JNC JK6
       LJMP KEY11
   JK6:CJNE A,#13,JK7
   JK7:JNC JK8
       LJMP KEY12
   JK8:CJNE A,#14,JK9
   JK9:JNC JK10
       LJMP KEY13
  JK10:LJMP KEY14
  JKRT:RET


;键盘功能 KEY10~KEY14功能键
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

KEY10:                 ;温度/日期显示控制
         MOV A,50H
         INC A
         MOV 50H,A
         JNB ACC.0,K5
         LCALL GETTEMP
         LCALL DISPTEMP
         LCALL DELAY1
         SJMP K6
      K5:LCALL DISPDATE
         LCALL DELAY1
      K6:POP PSW
         POP ACC
         RET
KEY11:                ;闹钟开关
         MOV A,51H
         JNB ACC.0,K1
         CLR TR1
         LCALL DISPOFF
         SJMP K2
      K1:SETB TR1
         LCALL DISPON
      K2:INC A
         MOV 51H,A
         POP PSW
         POP ACC
         RET
KEY12:               ;开关机
         MOV A,52H
         JB ACC.0,K3
         ACALL TURNON
         SJMP K4
      K3:ACALL TURNOFF
      K4:INC A
         MOV 52H,A
         POP PSW
         POP ACC
         RET
KEY13:                      ;设定定时开关时间
         MOV A,53H
         INC A
         MOV 53H,A
         JNB ACC.0,K7
         LCALL DISPON
         LCALL SETALMON     ;定时开
         SJMP K8
      K7:LCALL DISPOFF
         LCALL SETALMOFF     ;定时关
      K8:POP PSW
         POP ACC
         RET
KEY14:LCALL SETtemph
       POP PSW
       POP ACC
       RET
KEY141:                   ;设定时间、温度上限值、日期
         CLR C
         MOV A,54H
         INC A
         MOV 54H,A
         CJNE A,#2,K9
      K9:JNC K10
         LCALL SETTIME
         SJMP K13
     K10:CJNE A,#3,K11
     K11:JNC K12
         LCALL SETTEMPH
         SJMP K13
     K12:LCALL SETDATE
         MOV 54H,#0
     K13:POP PSW
         POP ACC
         RET

TURNOFF:
         SETB P1.5
         CLR TR0
         CLR TR1
         LCALL DISPOFF
         RET
TURNON:
         CLR P1.5
         SETB TR0
         SETB TR1
         LCALL DISPON
         RET
SETALMON:                  ;设定开机时间(4位)
         ACALL K15
         LCALL JZKEY
         MOV A,5AH        ;设定小时
         ANL A,#0FH
         MOV 5AH,A
         MOV A,3FH
         SWAP A
         ADD A,5AH
         MOV 5AH,A
         ACALL K15
         LCALL JZKEY
         MOV A,5AH
         ANL A,#0F0H
         MOV 5AH,A
         MOV A,3FH
         ADD A,5AH
         MOV 5AH,A
         ACALL K15
         LCALL JZKEY
         MOV A,5BH        ;设定分钟
         ANL A,#0FH
         MOV 5BH,A
         MOV A,3FH
         SWAP A
         ADD A,5BH
         MOV 5BH,A
         ACALL K15

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -