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

📄 main.asm

📁 这是一段温度传感器电路仿真原理图
💻 ASM
📖 第 1 页 / 共 3 页
字号:
work_str1:
          db ' (1) *:*---*:*  '
          db 0
work_str2:
          db ' (2) *:*---*:*  '
          db 0
 ;*****************************
START_:
        MOV     A,LCD_STAT
        XRL     A,#0
        JZ      RE_SET
        XRL     A,#1
        JZ      SET_TIME
        XRL     A,#3
        JZ      SET_WORK
RE_SET:  CALL   GET_KEYDATA1       ;CPU处于显示当前时间状态
         JMP    BACK
SET_TIME:CALL   GET_KEYDATA2       ;CPU处于修改当前时间状态
         JMP    BACK2
SET_WORK:CALL   GET_KEYDATA3       ;CPU处于修改任务执行时间状态
         JMP    BACK2

     BACK:    POP     ACC
              POP     ACC
              SETB   TR0
              SETB   ET0
              SETB   EA
              AJMP   LOP
     BACK2:MOV     TIME_COUNTER,#0
           MOV     TH1,#9EH
           MOV     TL1,#58H
           POP     ACC
           POP     ACC
           SETB    ET1
           CLR     ET0
           SETB    EA
           SETB    TR1
           AJMP    STAT1
;**********************************
GET_KEYDATA1:
        CALL    KEY_SCANF
        MOV     P1,#0C3H
        MOV     A,KEY_DATA
        XRL     A,#1
        JZ      SET_TIME1
        MOV     A,KEY_DATA
        XRL     A,#6
        JZ      CPLP3_4
OTHER_KEY:
        MOV     A,P3
        JNB     ACC.2,OTHER_KEY
        cpl     p2.7
        jmp     back
CPLP3_4:NOP
RE_RDP3:MOV     A,P3
        JNB     ACC.2,RE_RDP3
        CPL     P3.4
        jmp     back
SET_TIME1:
        MOV     TH1,#9EH
        MOV     TL1,#58H
        CLR     EX0
        SETB    ET1
        SETB    EA
        SETB    TR1                ;初始化T1定时器
GET_TIME:
        MOV     A,P3
        JNB     ACC.2,GET_TIME
        MOV     A,TIME_COUNTER
        CJNE    A,#4,PANDUAN
PANDUAN:JC      DUAN_PRESS
LONG_PRESS:CLR     TR1
           MOV     LCD_STAT,#1

           MOV     A,#LCD_SETDDADDR+2
           CALL    WRCMD

           mov A,#LCD_SETVISIBLE+5
	   call wrcmd

           MOV     TIME_COUNTER,#0
           POP     ACC
           POP     ACC
           SETB    TR1
           SETB    EX0
           SETB    EA

STAT1:
           MOV     A,TIME_COUNTER
           CJNE    A,#20,KT
        KT:JC      STAT1

  GO_START:CLR     TR1

           MOV     TIME0_CN,#1
           MOV     TIME_COUNTER,#0

           MOV     A,LCD_STAT
           XRL     A,#2
           JNZ     TJMP

           MOV     A,#LCD_SETVISIBLE
           CALL    WRCMD

      TJMP:MOV     LCD_STAT,#0
           SETB    TR0
           SETB    ET0
           SETB    EA

           AJMP    LOP
DUAN_PRESS:
           CLR     TR1
           MOV     TIME_COUNTER,#0
           MOV     LCD_STAT,#2

           mov A,#LCD_SETVISIBLE
	   call wrcmd

           MOV     A,#LCD_SETDDADDR
           CALL    WRCMD

           MOV     DPTR,#work_str1
           MOV     R1,#S1_HOUR_DATA
           CALL    WRSTR

           MOV     A,#LCD_SETDDADDR+64
           CALL    WRCMD

           MOV     DPTR,#work_str2
           MOV     R1,#S2_HOUR_DATA
           CALL    WRSTR

           mov     A,#LCD_SETVISIBLE+5
	   call    wrcmd
           MOV     A,#LCD_SETDDADDR+5
           CALL    WRCMD

           MOV     TIME_COUNTER,#0
           POP     ACC
           POP     ACC
           SETB    TR1
           SETB    EX0
           SETB    EA
           JMP     STAT1
;************************************
GET_KEYDATA2:
           CLR     TR1
           MOV     TIME_COUNTER,#0
           CALL    KEY_SCANF
           MOV     P1,#0C3H
       KPP:MOV     A,P3
           JNB     ACC.2,KPP
           MOV     A,KEY_DATA
           XRL     A,#2
           JZ      MOVE_LIFT
           MOV     A,KEY_DATA
           XRL     A,#3
           JZ      MOVE_RIGHT
           MOV     A,KEY_DATA
           XRL     A,#4
           JZ      INC_1
           MOV     A,KEY_DATA
           XRL     A,#5
           JZ      DEC_1
           MOV     A,KEY_DATA
           XRL     A,#6
           JZ      ENTER
           RET
;+++++++++++++++++++++++++++++++++++++++++
MOVE_LIFT: CALL    MOVE_L
           JMP     BACK2
MOVE_RIGHT:CALL    MOVE_R
           JMP     BACK2
INC_1:     CALL    INC_
           JMP     BACK2
DEC_1:     CALL    DEC_
           JMP     BACK2
ENTER:     CALL    IS_OK
           JMP     BACK2
;+++++++++++++++++++++++++++++++++++++++++光标左移到指定位置子程序
MOVE_L:    mov     dptr,#LCD_BUSY_RD
	   movx    A,@dptr
           CLR     ACC.7
           MOV     AC_ADD,A
           XRL     A,#02H
           JZ      TO_46
           MOV     A,AC_ADD
           XRL     A,#03H
           JZ      TO_2
           MOV     A,AC_ADD
           XRL     A,#05H
           JZ      TO_3
           MOV     A,AC_ADD
           XRL     A,#06H
           JZ      TO_5
           MOV     A,AC_ADD
           XRL     A,#08H
           JZ      TO_6
           MOV     A,AC_ADD
           XRL     A,#09H
           JZ      TO_8
           MOV     A,AC_ADD
           XRL     A,#0bH
           JZ      TO_9
           MOV     A,AC_ADD
           XRL     A,#42H
           JZ      TO_11
           MOV     A,AC_ADD
           XRL     A,#43H
           JZ      TO_42
           MOV     A,AC_ADD
           XRL     A,#45H
           JZ      TO_43
           MOV     A,AC_ADD
           XRL     A,#46H
           JZ      TO_45
TO_46:
           MOV  A,#LCD_SETDDADDR+46H
           CALL WRCMD
           RET
TO_2:
           MOV  A,#LCD_SETDDADDR+2
           CALL WRCMD
           RET
TO_3:
           MOV  A,#LCD_SETDDADDR+3
           CALL WRCMD
           RET
TO_5:
           MOV  A,#LCD_SETDDADDR+5
           CALL WRCMD
           RET
TO_6:
           MOV  A,#LCD_SETDDADDR+6
           CALL WRCMD
           RET
TO_8:
           MOV  A,#LCD_SETDDADDR+8
           CALL WRCMD
           RET
TO_9:
           MOV  A,#LCD_SETDDADDR+9
           CALL WRCMD
           RET
TO_11:
           MOV  A,#LCD_SETDDADDR+11
           CALL WRCMD
           RET
TO_42:
           MOV  A,#LCD_SETDDADDR+42H
           CALL WRCMD
           RET
TO_43:
           MOV  A,#LCD_SETDDADDR+43H
           CALL WRCMD
           RET
TO_45:
           MOV  A,#LCD_SETDDADDR+45H
           CALL WRCMD
           RET
;MOVE TO RIGHT // 右移
MOVE_R:
           mov     dptr,#LCD_BUSY_RD
	       movx    A,@dptr
           CLR     ACC.7
           MOV     AC_ADD,A
           XRL     A,#02H
           JZ      TO_3
           MOV     A,AC_ADD
           XRL     A,#03H
           JZ      TO_5
           MOV     A,AC_ADD
           XRL     A,#05H
           JZ      TO_6
           MOV     A,AC_ADD
           XRL     A,#06H
           JZ      TO_8
           MOV     A,AC_ADD
           XRL     A,#08H
           JZ      TO_9
           MOV     A,AC_ADD
           XRL     A,#09H
           JZ      TO_11
           MOV     A,AC_ADD
           XRL     A,#0BH
           JZ      TO_42
           MOV     A,AC_ADD
           XRL     A,#42H
           JZ      TO_43
           MOV     A,AC_ADD
           XRL     A,#43H
           JZ      TO_45
           MOV     A,AC_ADD
           XRL     A,#45H
           JZ      TO_46
           MOV     A,AC_ADD
           XRL     A,#46H
           JZ      TO_2
           RET
INC_:
           mov  dptr,#lcd_busy_rd
           movx  a,@dptr
           clr  acc.7
           add  a,#80h
           mov  ac_adD,a
           XRL  A,#8BH
           JZ   CHANGE_WEEK
           MOV  DPTR,#LCD_DATA_RD
           MOVX A,@DPTR
           mov  45h,a
           mov  a,ac_adD
           call wrcmd
           mov a,45h
           CLR  C
           SUBB A,#48
           MOV  DPTR,#NO_STR1
           MOVC A,@A+DPTR

           ADD  A,#48
           MOV  DPTR,#LCD_DATA_WR
           MOVX @DPTR,A
           mov  a,ac_adD
           call wrcmd

           RET
CHANGE_WEEK:
           MOV  A,WEEK
           XRL  A,#07H
           JNZ  JMPK
           MOV  WEEK,#00H
JMPK:      MOV  A,WEEK
           INC  A
           MOV  WEEK,A
           MOV  A,#LCD_SETVISIBLE+4
           CALL WRCMD
           CALL WEEK0

           MOV  A,AC_ADD
           CALL WRCMD
           MOV  A,#LCD_SETVISIBLE+5
           CALL WRCMD
           RET
DEC_:
           mov  dptr,#lcd_busy_rd
           movx  a,@dptr
           clr  acc.7
           add  a,#80h
           mov  ac_adD,a
           XRL  A,#8BH
           JZ   CHANGE_WEEK
           MOV  DPTR,#LCD_DATA_RD
           MOVX A,@DPTR
           mov  45h,a
           mov  a,ac_adD
           call wrcmd
           mov a,45h
           CLR  C
           SUBB A,#48
           MOV  DPTR,#NO_STR2
           MOVC A,@A+DPTR

           ADD  A,#48
           MOV  DPTR,#LCD_DATA_WR
           MOVX @DPTR,A
           mov  a,ac_adD
           call wrcmd

           RET
NO_STR1:
         DB 1, 2 ,3 ,4 ,5, 6 ,7 ,8 ,9 ,0
NO_STR2:
         DB 9 ,0 ,1 ,2 ,3 ,4 ,5 ,6, 7, 8
IS_OK:
           POP  ACC
           POP  ACC
           MOV  A,#LCD_SETDDADDR
           CALL WRCMD

           MOV  A,#LCD_SETVISIBLE+4
           CALL WRCMD

           CALL READ_LCD_DATA
           CALL WR_DATA_DS1302

           POP    ACC
           POP    ACC
           JMP    GO_START
READ_LCD_DATA:
           MOV    R1,#YEAR
           MOV    R2,#2
           CALL   GET_DATA
           MOV    @R1,A

           INC    R1
           MOV    R2,#5
           CALL   GET_DATA
           CLR    C
           CJNE   A,#13H,MONTH_RIGHT
MONTH_RIGHT:JNC   UESLESS_DATE
           MOV    @R1,A

           INC    R1
           MOV    R2,#8
           CALL   GET_DATA
           CLR    C
           CJNE   A,#32H,DATE_RIGHT
DATE_RIGHT:JNC   UESLESS_DATE
           MOV    @R1,A

           INC    R1
           MOV    R2,#66
           CALL   GET_DATA
           CLR    C
           CJNE   A,#24H,HOUR_RIGHT
HOUR_RIGHT:JNC   UESLESS_DATE
           MOV    @R1,A

           INC    R1
           MOV    R2,#69
           CALL   GET_DATA
           CLR    C
           CJNE   A,#60H,MINU_RIGHT
MINU_RIGHT:JNC   UESLESS_DATE
           MOV    @R1,A
           RET
UESLESS_DATE:
           POP  ACC
           POP  ACC
           CLR  UESLESS_BIT
           JMP  UESLESS_DISPLAY

WR_DATA_DS1302:

         MOV    R5,#8CH
         MOV    R1,#YEAR
         CALL   WR_DATA_DS

         MOV    R5,#8AH
         MOV    R1,#WEEK
         CALL   WR_DATA_DS

         MOV    R5,#88H
         MOV    R1,#MONTH
         CALL   WR_DATA_DS

         MOV    R5,#86H
         MOV    R1,#DATE
         CALL   WR_DATA_DS

         MOV    R5,#84H
         MOV    R1,#HOUR
         CALL   WR_DATA_DS

         MOV    R5,#82H
         MOV    R1,#MINU
         CALL   WR_DATA_DS

         CLR    RST
         RET

WR_DATA_DS:
         CLR    RST
         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

⌨️ 快捷键说明

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