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

📄 main.asm

📁 基于AT89C51+DS1302的定时控制系统程序!! 具体实现功能: DS1302读写配置、DS18B20数字式温度传感器的读写控制及1602LCD的控制
💻 ASM
📖 第 1 页 / 共 3 页
字号:
         CLR    SCLK
         SETB   RST
         MOV    A,R5
         MOV    R2,#8
    WR_D:CLR    SCLK
         RRC    A
         MOV    IO_DATA,C
         NOP
         SETB   SCLK
         DJNZ   R2,WR_D
         MOV    A,@R1
         MOV    R2,#8
     TOO:CLR    SCLK
         RRC    A
         MOV    IO_DATA,C
         NOP
         SETB   SCLK
         DJNZ   R2,TOO
         CLR    RST
         RET


GET_KEYDATA3:

           CLR     TR1                      ;;SP=50,IE=09,TR0=0,TR1=0
           MOV     TIME1_CN,#0
           MOV     A,KEY_DATA
           XRL     A,#2
           JZ      MOVE_LIFTw
           MOV     A,KEY_DATA
           XRL     A,#3
           JZ      MOVE_RIGHTw
           MOV     A,KEY_DATA
           XRL     A,#4
           JZ      INC_1w
           MOV     A,KEY_DATA
           XRL     A,#5
           JZ      DEC_1w
           MOV     A,KEY_DATA
           XRL     A,#6
           JZ      ENTERw
           jmp     back2
MOVE_RIGHTW:
           CALL    RIGHT
           JMP     BACK2
MOVE_LIFTW:
           CALL    LIFT
           JMP     BACK2
INC_1W:
           CALL    INCD
           JMP     BACK2
DEC_1W:
           CALL    DECD
           JMP     BACK2
ENTERW:

           CALL    RD_WORK_TIME
           CALL    WR_WORK_TIME_TO_DSRAM

           mov     A,#LCD_SETVISIBLE
	   call    wrcmd

           POP  ACC
           POP  ACC
           JMP  GO_START
RIGHT:
           mov     dptr,#LCD_BUSY_RD              ;SP=52
	   movx    A,@dptr
           JB      ACC.7,RIGHT

           MOV     AC_ADD,A
           XRL     A,#04
           JZ      GO_5
           MOV     A,AC_ADD
           XRL     A,#05
           JZ      GO_7
           MOV     A,AC_ADD
           XRL     A,#07
           JZ      GO_8
           MOV     A,AC_ADD
           XRL     A,#8
           JZ      GO_11
           MOV     A,AC_ADD
           XRL     A,#11
           JZ      GO_12
           MOV     A,AC_ADD
           XRL     A,#12
           JZ      GO_14
           MOV     A,AC_ADD
           XRL     A,#14
           JZ      GO_15
           MOV     A,AC_ADD
           XRL     A,#15
           JZ      GO_68
           MOV     A,AC_ADD
           XRL     A,#68
           JZ      GO_69
           MOV     A,AC_ADD
           XRL     A,#69
           JZ      GO_71
           MOV     A,AC_ADD
           XRL     A,#71
           JZ      GO_72
           MOV     A,AC_ADD
           XRL     A,#72
           JZ      GO_75
           MOV     A,AC_ADD
           XRL     A,#75
           JZ      GO_76
           MOV     A,AC_ADD
           XRL     A,#76
           JZ      GO_78
           MOV     A,AC_ADD
           XRL     A,#78
           JZ      GO_79
           MOV     A,AC_ADD
           XRL     A,#79
           JZ      GO_4
GO_4:
           MOV  A,#LCD_SETDDADDR+4
           CALL WRCMD
           RET
GO_5:
           MOV  A,#LCD_SETDDADDR+5
           CALL WRCMD
           RET
GO_7:
           MOV  A,#LCD_SETDDADDR+7
           CALL WRCMD
           RET
GO_8:
           MOV  A,#LCD_SETDDADDR+8
           CALL WRCMD
           RET
GO_11:
           MOV  A,#LCD_SETDDADDR+11
           CALL WRCMD
           RET
GO_12:
           MOV  A,#LCD_SETDDADDR+12
           CALL WRCMD
           RET
GO_14:
           MOV  A,#LCD_SETDDADDR+14
           CALL WRCMD
           RET
GO_15:
           MOV  A,#LCD_SETDDADDR+15
           CALL WRCMD
           RET
GO_68:
           MOV  A,#LCD_SETDDADDR+68
           CALL WRCMD
           RET
GO_69:
           MOV  A,#LCD_SETDDADDR+69
           CALL WRCMD
           RET
GO_71:
           MOV  A,#LCD_SETDDADDR+71
           CALL WRCMD
           RET
GO_72:
           MOV  A,#LCD_SETDDADDR+72
           CALL WRCMD
           RET
GO_75:
           MOV  A,#LCD_SETDDADDR+75
           CALL WRCMD
           RET
GO_76:
           MOV  A,#LCD_SETDDADDR+76
           CALL WRCMD
           RET
GO_78:
           MOV  A,#LCD_SETDDADDR+78
           CALL WRCMD
           RET
GO_79:
           MOV  A,#LCD_SETDDADDR+79
           CALL WRCMD
           RET
LIFT:
           mov     dptr,#LCD_BUSY_RD
	   movx    A,@dptr
           JB      ACC.7,LIFT

           MOV     AC_ADD,A
           XRL     A,#04
           JZ      GO_79
           MOV     A,AC_ADD
           XRL     A,#05
           JZ      GO_4
           MOV     A,AC_ADD
           XRL     A,#07
           JZ      GO_5
           MOV     A,AC_ADD
           XRL     A,#8
           JZ      GO_7
           MOV     A,AC_ADD
           XRL     A,#11
           JZ      GO_8
           MOV     A,AC_ADD
           XRL     A,#12
           JZ      GO_11
           MOV     A,AC_ADD
           XRL     A,#14
           JZ      GO_12
           MOV     A,AC_ADD
           XRL     A,#15
           JZ      GO_14
           MOV     A,AC_ADD
           XRL     A,#68
           JZ      GO_15
           MOV     A,AC_ADD
           XRL     A,#69
           JZ      GO_68
           MOV     A,AC_ADD
           XRL     A,#71
           JZ      GO_69
           MOV     A,AC_ADD
           XRL     A,#72
           JZ      GO_71
           MOV     A,AC_ADD
           XRL     A,#75
           JZ      GO_72
           MOV     A,AC_ADD
           XRL     A,#76
           JZ      GO_75
           MOV     A,AC_ADD
           XRL     A,#78
           JZ      GO_76
           MOV     A,AC_ADD
           XRL     A,#79
           JZ      GO_78

INCD:
           call    inc_
           ret
DECD:
           call    dec_
           ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
RD_WORK_TIME:
           mov A,#LCD_SETVISIBLE+4
	   call wrcmd

           MOV  R1,#WORK_DATA
           MOV  R2,#4
           CALL GET_DATA
           CLR  C
           CJNE A,#24H,TTA
       TTA:JC   Y1
           JMP  UESLESS_DATA
        Y1:MOV  @R1,A
           INC  R1
           MOV  R2,#7
           CALL GET_DATA
           CLR  C
           CJNE A,#60H,TTB
       TTB:JC   Y2
           JMP  UESLESS_DATA
        Y2:MOV  @R1,A
           INC  R1
           MOV  R2,#11
           CALL GET_DATA
           CLR  C
           CJNE A,#24H,TTC
       TTC:JC   Y3
           JMP  UESLESS_DATA
        Y3:MOV  @R1,A
           INC  R1
           MOV  R2,#14
           CALL GET_DATA
           CLR  C
           CJNE A,#60H,TTD
       TTD:JC   Y4
           JMP  UESLESS_DATA
        Y4:MOV  @R1,A
           INC  R1
           MOV  R2,#68
           CALL GET_DATA
           CLR  C
           CJNE A,#24H,TTE
       TTE:JC   Y5
           JMP  UESLESS_DATA
        Y5:MOV  @R1,A
           INC  R1
           MOV  R2,#71
           CALL GET_DATA
           CLR  C
           CJNE A,#60H,TTF
       TTF:JC   Y6
           JMP  UESLESS_DATA
        Y6:MOV  @R1,A
           INC  R1
           MOV  R2,#75
           CALL GET_DATA
           CLR  C
           CJNE A,#24H,TTG
       TTG:JC   Y7
           JMP  UESLESS_DATA
        Y7:MOV  @R1,A
           INC  R1
           MOV  R2,#78
           CALL GET_DATA
           CLR  C
           CJNE A,#60H,TTH
       TTH:JNC   UESLESS_DATA
           MOV  @R1,A
           RET
UESLESS_DATA:
           SETB UESLESS_BIT
UESLESS_DISPLAY:
           mov A,#LCD_SETVISIBLE
	   call wrcmd

           MOV  A,#LCD_SETDDADDR
           CALL WRCMD

           MOV  DPTR,#UESLESS_STR1
           CALL WRSTR2

           MOV  A,#LCD_SETDDADDR+64
           CALL WRCMD

           MOV  DPTR,#UESLESS_STR2
           CALL WRSTR2

           MOV  A,#LCD_SETVISIBLE+4
           CALL WRCMD

           MOV  R5,#250
   RE_CALL:CALL DELAY8MS
           DJNZ R5,RE_CALL
           POP ACC
           POP ACC

              JB   UESLESS_BIT,TO_DUAN_PRESS
              MOV  LCD_STAT,#2
              JMP  GO_START
TO_DUAN_PRESS:JMP  duan_press
;#############################
wrstr2:
           clr a
           movc a,@a+dptr
           jz   exit2
           push dpl
           push dph
           mov dptr,#LCD_DATA_WR
           movx @dptr,A
	   call wtbusy
           pop dph
           pop dpl
           inc dptr
           jmp wrstr2
     exit2:ret

UESLESS_STR1:
           DB '  Uesless time! '
           db 0
UESLESS_STR2:
           db '  Enter again!! '
           db 0
 GET_DATA:
           MOV A,R2
           ADD A,#80H
           CALL WRCMD
           CALL RD_DATA
           CLR  C
           SUBB A,#48
           SWAP A
           MOV  AC_DATA,A
           CALL RD_DATA
           CLR  C
           SUBB A,#48
           ORL  A,AC_DATA
           RET

   RD_DATA:MOV  DPTR,#LCD_DATA_RD
           MOVX A,@DPTR
           RET
WR_WORK_TIME_TO_DSRAM:
           MOV     R5,#0CEH
           MOV     R1,#WORK_DATA
           CALL    WR_DATA_DS
           MOV     R5,#0CCH
           MOV     R1,#WORK_DATA+1
           CALL    WR_DATA_DS
           MOV     R5,#0CAH
           MOV     R1,#WORK_DATA+2
           CALL    WR_DATA_DS
           MOV     R5,#0C8H
           MOV     R1,#WORK_DATA+3
           CALL    WR_DATA_DS
           MOV     R5,#0C6H
           MOV     R1,#WORK_DATA+4
           CALL    WR_DATA_DS
           MOV     R5,#0C4H
           MOV     R1,#WORK_DATA+5
           CALL    WR_DATA_DS
           MOV     R5,#0C2H
           MOV     R1,#WORK_DATA+6
           CALL    WR_DATA_DS
           MOV     R5,#0C0H
           MOV     R1,#WORK_DATA+7
           CALL    WR_DATA_DS
           MOV     R5,#0D0H
           MOV     R1,#WORK_DATA+7
           CALL    WR_DATA_DS
           CLR     RST
           RET
COMPAIR:   NOP
com_work1: clr     a
           orl     a,s1_hour_data
           orl     a,s1_minu_data
           orl     a,t1_hour_data
           orl     a,t1_minu_data
           jz      com_work2
           mov     a,hour
           xrl     a,s1_hour_data
           jnz     com_stop1_time
           mov     a,minu
           xrl     a,s1_minu_data
           jnz     com_stop1_time
           clr     p3.4
com_stop1_time:
           mov     a,hour
           xrl     a,t1_hour_data
           jnz     com_work2
           mov     a,minu
           xrl     a,t1_minu_data
           jnz     com_work2
           setb    p3.4
com_work2: clr     a
           orl     a,s2_hour_data
           orl     a,s2_minu_data
           orl     a,t2_hour_data
           orl     a,t2_hour_data
           jz      quit_compair
           mov     a,hour
           xrl     a,s2_hour_data
           jnz     com_stop2_time
           mov     a,minu
           xrl     a,s2_minu_data
           jnz     com_stop2_time
           clr     p3.4
com_stop2_time:
           mov     a,hour
           xrl     a,t2_hour_data
           jnz     quit_compair
           mov     a,minu
           xrl     a,t2_minu_data
           jnz     quit_compair
           setb    p3.4
quit_compair:
           ret
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!8ms delay program
DELAY8MS:
        MOV     R6,#5
     LP:MOV     R7,#200
        DJNZ    R7,$
        DJNZ    R6,LP
        RET
        RET

      NOP
      NOP
      END









⌨️ 快捷键说明

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