Giúp mình sửa lỗi trong đoạn code này với.Mình viết chương trình gồm các phím 14:cho phép nhập,phím 12 :hiển thị .Khi bấm phím 14 thì nhập số sau đó bấm 12 để hiển thị ra 4 led.Số nhập có thể lên tới 4 chữ số.Mình viết sau mãi không nhập và hiển thị được.
CHUSO_1 EQU 31H
CHUSO_2 EQU 32H
CHUSO_3 EQU 33H
CHUSO_4 EQU 34H
CHON EQU 35H
KEY_SET EQU 36H
KEY_DAT EQU 37H
PHIM_NHAN EQU 38H
DONVI EQU 39H
CHUC EQU 40H
TRAM EQU 41H
NGHIN EQU 42H
ORG 00H
MAIN:
MOV CHUSO_1,#0
MOV CHUSO_2,#0
MOV CHUSO_3,#0
MOV CHUSO_4,#0
CALL CHUYENMA
CALL HIENTHI
LJMP EX
CJNE A,#14,DAT_KEY
CALL PHIM
CALL EX
DAT_KEY:
CJNE A,#12,MAIN
CALL CHUYENMA
CALL HIENTHI
LOP:
LJMP MAIN
IN_HEX: MOV R4,#255
back1: call get_key
jnb 11,in_hex
djnz r4,back1
push acc
back2: mov r4,#255
back3: call get_key
jb 11,back2
djnz r4,back3
pop acc
ret
get_key:
mov A,#0F7h
mov r6,#4
test:
mov p0,a
mov r7,a
mov a,p0
anl a,#0F0h
cjne a,#0F0h,key_hit
mov a,r7
rR a
djnz r6,test
clr 11
sjmp exit1
key_hit:
mov r7,a
mov a,#4
clr 11
subb a,r6
mov r6,a
mov a,r7
SWAP A
mov r5,#4
again:
RRC a
jnc done
inc r6
inc r6
inc r6
inc r6
djnz r5,again
done: setb 11
mov A,R6
ADD A,#1
exit1: ret
PHIM:
CALL EX
MOV CHUSO_4,A
CALL EX
CALL TEST1
MOV CHUSO_3,A
CALL EX
CALL TEST1
MOV CHUSO_2,A
CALL EX
CALL TEST1
MOV CHUSO_1,A
LJMP NEXT
LJMP MAIN
TEST1: CJNE A,#12,EXIT_1
NEXT: LJMP CHUYENMA
LJMP HIENTHI
LJMP EXIT_1
EX: CALL IN_HEX
JNB 11,EX
RET
EXIT_1: RET
CHUYENMA:
MOV A,CHUSO_4
ADD A,#000H
MOV DONVI,A
MOV A,CHUSO_3
ADD A,#010H
MOV CHUC,A
MOV A,CHUSO_2
ADD A,#020H
MOV TRAM,A
MOV A,CHUSO_1
ADD A,#030H
MOV NGHIN,A
RET
DELAY_1MS:
MOV R3,#00H
LOOPE: INC R3
NOP
CJNE R3,#250,LOOPE
RET
HIENTHI:
MOV R0,#100
LOOP:
MOV P2,DONVI
CALL DELAY_1MS
MOV P2,CHUC
CALL DELAY_1MS
MOV P2,TRAM
CALL DELAY_1MS
MOV P2,NGHIN
CALL DELAY_1MS
DJNZ R0,LOOP
RET
END
CHUSO_1 EQU 31H
CHUSO_2 EQU 32H
CHUSO_3 EQU 33H
CHUSO_4 EQU 34H
CHON EQU 35H
KEY_SET EQU 36H
KEY_DAT EQU 37H
PHIM_NHAN EQU 38H
DONVI EQU 39H
CHUC EQU 40H
TRAM EQU 41H
NGHIN EQU 42H
ORG 00H
MAIN:
MOV CHUSO_1,#0
MOV CHUSO_2,#0
MOV CHUSO_3,#0
MOV CHUSO_4,#0
CALL CHUYENMA
CALL HIENTHI
LJMP EX
CJNE A,#14,DAT_KEY
CALL PHIM
CALL EX
DAT_KEY:
CJNE A,#12,MAIN
CALL CHUYENMA
CALL HIENTHI
LOP:
LJMP MAIN
IN_HEX: MOV R4,#255
back1: call get_key
jnb 11,in_hex
djnz r4,back1
push acc
back2: mov r4,#255
back3: call get_key
jb 11,back2
djnz r4,back3
pop acc
ret
get_key:
mov A,#0F7h
mov r6,#4
test:
mov p0,a
mov r7,a
mov a,p0
anl a,#0F0h
cjne a,#0F0h,key_hit
mov a,r7
rR a
djnz r6,test
clr 11
sjmp exit1
key_hit:
mov r7,a
mov a,#4
clr 11
subb a,r6
mov r6,a
mov a,r7
SWAP A
mov r5,#4
again:
RRC a
jnc done
inc r6
inc r6
inc r6
inc r6
djnz r5,again
done: setb 11
mov A,R6
ADD A,#1
exit1: ret
PHIM:
CALL EX
MOV CHUSO_4,A
CALL EX
CALL TEST1
MOV CHUSO_3,A
CALL EX
CALL TEST1
MOV CHUSO_2,A
CALL EX
CALL TEST1
MOV CHUSO_1,A
LJMP NEXT
LJMP MAIN
TEST1: CJNE A,#12,EXIT_1
NEXT: LJMP CHUYENMA
LJMP HIENTHI
LJMP EXIT_1
EX: CALL IN_HEX
JNB 11,EX
RET
EXIT_1: RET
CHUYENMA:
MOV A,CHUSO_4
ADD A,#000H
MOV DONVI,A
MOV A,CHUSO_3
ADD A,#010H
MOV CHUC,A
MOV A,CHUSO_2
ADD A,#020H
MOV TRAM,A
MOV A,CHUSO_1
ADD A,#030H
MOV NGHIN,A
RET
DELAY_1MS:
MOV R3,#00H
LOOPE: INC R3
NOP
CJNE R3,#250,LOOPE
RET
HIENTHI:
MOV R0,#100
LOOP:
MOV P2,DONVI
CALL DELAY_1MS
MOV P2,CHUC
CALL DELAY_1MS
MOV P2,TRAM
CALL DELAY_1MS
MOV P2,NGHIN
CALL DELAY_1MS
DJNZ R0,LOOP
RET
END