汇编程序哪里有错误,我找不出来

是一个简单的门铃程序,按下按键,然后门铃“叮咚”响一次,数码管显示对应的数字。现在的情况是,数码管显示对应的数字,但是门铃“叮咚”响之后一直发“咚”音,停不下来了。下面是对应的仿真图和程序,哪位大佬帮我看一看。

程序

KEY BIT P1.4

LCNT EQU 30H

HCNT EQU 31H

FLAG EQU 33H

ORG 0000H

LJMP MAIN

ORG 000BH

JMP INT_T0

ORG 1000H

MAIN: MOV LCNT,#00H

MOV HCNT,#00H

CLR FLAG

MOV TMOD,#01H

MOV TH0,#HIGH(65536-700)

MOV TL0,#LOW(65536-700)

MOV R1,#0C0H

MOV A,R1

MOV P0,A

MOV R2,#00H

LCALL SAOMIAO    

SAOMIAO:JNB P1.0,YH1   

    JNB P1.1,YH2      

JNB P1.2,YH3   

JNB P1.3,YH4

YH1:    LCALL DELAY     

JNB P1.0,YH11

JMP RETURN2

YH11: MOV R1,#01H

MOV R2,#01H  

LCALL XIANSH1

JMP RETURN2

YH2:    LCALL DELAY     

JNB P1.1,YH22

JMP RETURN2

YH22: MOV R1,#02H

        MOV R2,#01H

LCALL XIANSH1 

JMP RETURN2

YH3:    LCALL DELAY     

    JNB P1.2,YH33

JMP RETURN2

YH33: MOV R1,#03H

    MOV R2,#01H

LCALL XIANSH1 

JMP RETURN2

YH4:    LCALL DELAY     

    JNB P1.3,YH44

JMP RETURN2

YH44: MOV R1,#04H

  MOV R2,#01H 

LCALL XIANSH1 

JMP RETURN2

XIANSH1:SETB P2.0

MOV A,R1

MOV DPTR,#SEGTAB       

MOVC A,@A+DPTR

MOV P0,A

CLR P2.0

LJMP KEYCHK

RET

RETURN2:RET

KEYCHK: CJNE R2,#01H,STAR

CALL DELAY

MOV IE,#82H

SETB TR0

JMP KEYCHK

STAR: JMP MAIN

INT_T0: INC LCNT

MOV A,LCNT

CJNE A,#100,I1

MOV LCNT,#00H

INC HCNT

MOV A,HCNT

CJNE A,#05H,I1

MOV HCNT,#00H

INC FLAG

I1: CPL P3.0

MOV A,FLAG

CJNE A,#00H,I2

JMP K1

I2: MOV A,FLAG

CJNE A,#01H,I3

JMP K2

I3: MOV A,FLAG

CJNE A,#02H,I1

MOV FLAG,#00H

CLR TR0

CLR TR0

MOV R2,#00H

JMP RETUNE

K1: MOV TH0,#HIGH(65536-700)

MOV TL0,#LOW(65536-700)

JMP RETUNE

K2: MOV TH0,#HIGH(65536-1000)

MOV TL0,#LOW(65536-1000)

RETUNE: RETI

SEGTAB: DB 0C0H,0F9H,0A4H,0B0H,99H   

        DB 92H,82H,0F8H,80H,90H    

DELAY: MOV R6,#20

D1:    MOV R5,#248

D2:    DJNZ R5,D2

      DJNZ R6,D1

  RET

  END

汇编太强大了,如果我一开始学的是汇编,我相信我坚持不下来