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

📄 复件 液体速度.asm

📁 液体点滴速度监测
💻 ASM
字号:
beep      bit p1.0
green     bit p1.1
red       bit p1.2
relay1    bit p1.3
relay2    bit p1.4
LEVEL     BIT P1.6
control   bit p1.7

CS        BIT  P2.0
CLK       BIT  P2.1
DAT       BIT  P2.2
KEY       BIT  P3.3
COMPARE   BIT  00H
press_xing     bit 01h
press_enter    bit 02h

SET_NUM   equ  24h
READ_NUM  EQU  25H
codd      equ  3fh
COD       EQU  40H
DATA_IN   EQU  41H
DATA_OUT  EQU  42H
BIT_COUNT EQU  43H
TIMER     EQU  44H
NUM       EQU  45H
PULSE     EQU  46H


COUNT1  EQU 30H
COUNT2  EQU 31H
COUNT3  EQU 32H
COUNT4  EQU 33H
COUNT5  EQU 34H
COUNT6  EQU 35H
COUNT7  EQU 36H
COUNT8  EQU 37H


        org 0
        ljmp main
        org 0003h
        ljmp SERIAL
        org 0013h
        ljmp read_key
        org 0040h


MAIN:
RST:    MOV DATA_OUT,#0A4H
        LCALL SEND
        SETB CS
        mov codd,#85h
        mov count2,#4

DIS:    MOV COD,#080H
        MOV NUM,#0AH
        LCALL LONG_DELAY
        LCALL DISPLAY
        INC COD
        LCALL DISPLAY
        INC COD
        LCALL DISPLAY
        INC COD
        LCALL DISPLAY
        INC COD
        LCALL DISPLAY
        INC COD
        LCALL DISPLAY
        CLR COMPARE

INIT:   mov sp,#60h
        CLR control
        clr relay1
        clr relay2
        clr green
        clr press_xing
        clr press_enter
        setb beep
        setb red
        MOV TMOD,#21H
        MOV TH1,#0D0H           
        MOV TL1,#0D0H
        MOV PCON,#80H
        MOV SCON,#50H            
        SETB TR1

        setb ex0
        setb ex1
        setb ea
      
begin:  jnb level,jmp_alarm
        NOP               
        LCALL DEAL_CONT
        LCALL ADJUST1
        NOP
        MOV NUM,PULSE
        MOV COD,#0C8H
        LCALL DISPLAY

        MOV NUM,PULSE+1
        INC COD
        LCALL DISPLAY

        MOV NUM,PULSE+2
        INC COD
        LCALL DISPLAY     
        JB COMPARE,COMP_BEGIN
        ljmp init;begin

COMP_BEGIN:     CLR GREEN
                MOV A,READ_NUM
                CJNE A,SET_NUM,COMP_BEGIN1
                JMP init
COMP_BEGIN1:    JC TURN_SONG
                JMP TURN_JIN

TURN_SONG:      MOV A,SET_NUM
                SUBB A,READ_NUM
                SUBB A,#40
                JNC LONG_SONG
                LCALL SONG
                SETB COMPARE
                JMP init

TURN_JIN:       SUBB A,SET_NUM
                SUBB A,#40
                JNC LONG_JIN
                LCALL JIN
                SETB COMPARE
                JMP init

jmp_alarm:      lcall alarm
                JMP init

LONG_JIN:       LCALL JIN
                LCALL JIN
                LCALL JIN
                LCALL JIN
                LCALL JIN
                LCALL JIN
                LCALL JIN
                LCALL JIN
                SETB COMPARE
                JMP INIT

LONG_SONG:      LCALL SONG
                LCALL SONG
                LCALL SONG
                LCALL SONG
                LCALL SONG
                LCALL SONG
                LCALL SONG
                LCALL SONG
                SETB COMPARE
                JMP INIT



read_key:       mov r0,#21h
                push a
                push psw
                push dpl
                push dph
                lcall clear_qian3
                mov codd,#85h
                mov count2,#4
dis2: clr ex1
DIS1: JB  KEY, dis1
      MOV DATA_OUT,#15H
      LCALL SEND
      LCALL RECEIVE
      SETB CS
      MOV A,DATA_IN
      lcall test_key
      jb press_xing,read_key
      mov @r0,num
      inc r0
      djnz count2,dis3
      jmp return_int
dis3: mov cod,codd
      nop
      lcall display
      lcall s1
      dec codd
      jmp dis1
return_int:     mov codd,#85h
                mov count2,#4
                lcall san_to_hex
                pop dph
                pop dpl
                pop psw
                pop a
                SETB COMPARE
                clr press_xing
                clr press_enter
                setb ex1
                reti

serial: CLR EX0
        CLR EX1
        CLR TR0
        push a
        push psw
        push tmod
        push th1
        push tl1
        push pcon
        push scon

        MOV TMOD,#21H
        MOV TH1,#0D0H           
        MOV TL1,#0D0H
        MOV PCON,#80H
        MOV SCON,#50H
        SETB TR1
        MOV COUNT4,#2
        MOV R0,#50H
        LCALL SERIAL_RECEIVE

        NOP
        DEC R0
        DEC R0
        MOV A,@R0
        CJNE A,#1,RE_RETI
        INC R0
        MOV A,@R0
        CJNE A,#2,RE_RETI
        MOV A,#1
        LCALL TRANSFER
        NOP
        MOV A,READ_NUM
        LCALL TRANSFER
        NOP
RE_RETI:      pop scon
              pop pcon
              pop tl1
              pop th1
              pop tmod
              pop psw
              pop a
              SETB EX0
              setb ex1
              setb tr0
              SETB EA
              reti



test_key:    inc a
             DEC A
             JZ key_0
             DEC A
             JZ key_1
             DEC A
             JZ key_2
             DEC A
             JZ key_3
             DEC A
             JZ key_4
             DEC A
             JZ key_5
             dec a
             jz key_6
             dec a
             jz key_7
             dec a
             jz key_8
             dec a
             jz key_9
             dec a
             jz key_a
             dec a
             jz key_b
             dec a
             jz key_c
             dec a
             jz key_d
             dec a
             jz key_e
             dec a
             jz key_f
             ljmp quit_key

key_0:          mov num,#1
                JMP quit_key
key_1:          mov num,#2
                JMP quit_key
key_2:          mov num,#3
                JMP quit_key
key_3:          NOP
                jmp quit_key
key_4:          mov num,#4
                JMP quit_key
key_5:          mov num,#5
                JMP quit_key
key_6:          mov num,#6
                JMP quit_key
key_7:          NOP
                JMP quit_key
key_8:          mov num,#7
                JMP quit_key
key_9:          mov num,#8
                JMP quit_key
key_a:          mov num,#9
                jmp quit_key
key_b:          nop
                JMP quit_key
key_c:          lcall clear_qian3
                mov codd,#85h
                mov count2,#4
                mov r0,#21h
                setb press_xing
                JMP quit_key
key_d:          mov num,#0
                jmp quit_key
key_e:          lcall flash_input
                setb press_enter
                JMP quit_key
key_f:          nop
                JMP quit_key
quit_key:       ret

alarm:  clr red
        clr beep
        lcall s2
        lcall s2
        LCALL S2
        LCALL S2
        setb beep
        setb red
        ret

jin:    clr relay1
        setb relay2
        lcall s2
        clr relay2
        SETB GREEN
        ret

song:   setb relay1
        clr relay2
        lcall s2
        clr relay1
        SETB GREEN
        ret

DEAL_CONT:      CLR green
                MOV COUNT5,#83
COUNT_BEGIN:    MOV TMOD,#15H
                MOV TH1,#00H
                MOV TL1,#00H
                MOV TH0,#0
                MOV TL0,#0
                CLR TF1
                SETB TR1
                SETB TR0
WAIT0:          JNB TF1, WAIT0
                CLR TR1
                CLR TF1
                DJNZ COUNT5,COUNT_AGAIN
                LJMP COUNT_QUIT
COUNT_AGAIN:    SETB TR1
                LJMP WAIT0
COUNT_QUIT:     CLR TR0
                CLR TR1
                CLR TF1
                MOV R4,TL0
                MOV R5,TH0
                nop
                RET

SERIAL_RECEIVE:CLR CONTROL
        SETB REN
WAIT1:  JBC RI,READ
        AJMP WAIT1
READ:   MOV A,SBUF
        MOV @R0,A
        INC R0
        DJNZ COUNT4,WAIT1
        RET

TRANSFER:       SETB CONTROL
                CLR REN
                MOV SBUF,A              
SEND1:          JNB TI,SEND1
                CLR TI
                CLR A
                ;CLR CONTROL
                RET


;-----------------SEND-------------------
SEND:PUSH ACC
     MOV BIT_COUNT,#08H
     CLR CS
     LCALL LONG_DELAY
     CLR CLK
     CLR C
SLOOP:    MOV A,DATA_OUT
          MOV C,ACC.7
          MOV DAT,C
          SETB CLK
          MOV A,DATA_OUT
          RL A
          MOV DATA_OUT,A
          LCALL SHORT_DELAY
          CLR CLK
          DJNZ BIT_COUNT,SLOOP
          CLR DAT
          POP ACC
          RET
;-----------------------------------
;--------RECEIVE--------------------
RECEIVE:PUSH ACC
        MOV BIT_COUNT,#08H
        SETB DAT
        MOV DATA_IN,#00H
        LCALL LONG_DELAY
 RELOOP:SETB CLK
        LCALL SHORT_DELAY
        CLR C
        MOV C,DAT
        MOV A,DATA_IN
        RLC A
        MOV DATA_IN,A
        MOV C,DAT
        CLR CLK
        DJNZ BIT_COUNT,RELOOP
        CLR DAT
        POP ACC
        RET
;-----------------------------------------------------
DISPLAY:
      MOV DATA_OUT,COD
      LCALL SEND
      MOV DATA_OUT,NUM
      LCALL SEND
      NOP
      SETB CS
      RET

clear_qian3:     MOV COD,#083H
                 MOV NUM,#0AH
                 LCALL LONG_DELAY
                 LCALL DISPLAY
                 INC COD
                 LCALL DISPLAY
                 INC COD
                 LCALL DISPLAY
                 ret

flash_input:     mov cod,#88h
                 mov num,#0c7h
                 lcall display
                 lcall s2
                 LCALL S2
                 LCALL S2
                 LCALL S2
                 mov cod,#88h
                 mov num,#0ffh
                 lcall display
                 ret


ADJUST1: MOV A,R4
         ;ADD A,R4
         ;MOV R4,A
         ;ADD A,R4
         MOV B,#3
         MUL AB
         MOV READ_NUM,A
         MOV B,#100
         DIV AB
         MOV PULSE+2,A
         MOV A,#10
         XCH A,B
         DIV AB
         MOV PULSE+1,A
         XCH A,B
         MOV PULSE,A
         RET

san_to_hex:              
         CLR   C
         mov r0,#21h
         MOV  A,@r0
         MOV  B,#100
         MUL  AB
         MOV  SET_NUM,A
         inc r0
         MOV  A,@r0
         MOV  B,#10
         MUL  AB
         XCH  A,SET_NUM
         ADD  A,SET_NUM
         inc r0       
         ADD  A,@r0
         MOV  SET_NUM,a
         RET

S1:     MOV COUNT8,#8
S11:    MOV COUNT7,#100
S12:    MOV COUNT6,#255
S13:    DJNZ COUNT6,S13
        DJNZ COUNT7,S12
        DJNZ COUNT8,S11
        RET

S2:     MOV COUNT8,#1
S21:    MOV COUNT7,#250
S22:    MOV COUNT6,#250
S23:    DJNZ COUNT6,S23
        DJNZ COUNT7,S22
        DJNZ COUNT8,S21
        RET

LONG_DELAY:        MOV TIMER,#25
DELAY_LOOP:        DJNZ TIMER,DELAY_LOOP
                   RET

SHORT_DELAY:       MOV TIMER,#4
D_LOOP1:           DJNZ TIMER,D_LOOP1
                   RET
ID_TAB: DB 01

⌨️ 快捷键说明

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