请教高手:程序转移问题。
各位论坛好友:
我近日写了一个用四块74LS164作串行显示和键盘的程序,但程序总是不能按照规定的方向转移,或者是触发中断信号不正确,K3,K4,K5,的中断触发信号为脉冲,本应该是低电平,我实在不知程序错在那里. 硬件如下:
四块74LS164串级连接在AT89C51的串行口上,第一块作为键盘第二块到第四块控制四位LED数码管,在初始化时把第一块输出全部置为0,从单片机的INT1引出一条线通过上接电阻接到5V电源上,在这条线上接上五个开关分别接到第一块164的6,10,11,12,13,脚上,通过中断判断是哪个键按下.程序如下:;20H STOP AND RUN
KEY: PUSH ACC
PUSH PSW
PUSH B
CLR EA
SETB C
ACALL D10MS
ACALL D10MS
JB P3.3,EXIT
MOV 22H,#00H
MOV 23H,#0F7H
MOV R7,#05H
KJ_LP: ACALL DISPLAY
INC 22H
JB P3.3,NEXT
SJMP KPOP
NEXT: MOV A,23H
RLC A
MOV 23H,A
DJNZ R7,KJ_LP
SJMP EXIT
KPOP: JNB P3.3,$
MOV A,22H
K1: CJNE A,#01H,K2
ACALL K1P
SJMP EXIT
K2: CJNE A,#02H,K3
ACALL K2P
SJMP EXIT
K3: CJNE A,#03H,K4
ACALL K3P
SJMP EXIT
K4: CJNE A,#04H,K5
ACALL K4P
SJMP EXIT
K5:CJNE A,#05H,EXIT
ACALL K5P
SJMP EXIT
;K1: MOV 23H,#0F7H
; ACALL DISPLAY
; JB P3.3,K2
; ACALL D10MS
; ACALL D10MS
; JB P3.3,K2
; ACALL K1P;STOP AND RUN
; SJMP EXIT
;K2: MOV 23H,#0EFH
; ACALL DISPLAY
; JB P3.3,K3
; ACALL D10MS
; ACALL D10MS
; JB P3.3,K3
; ACALL K2P;ADD FREUQENCY
; SJMP EXIT
;K3: MOV 23H,#0DFH
; ACALL DISPLAY
; JB P3.3,K4
; ACALL D10MS
; ACALL D10MS
; JB P3.3,K4
; ACALL K3P;DEC FREUQENCY
; SJMP EXIT
;K4: MOV 23H,#0BFH
; ACALL DISPLAY
; JB P3.3,K5
; ACALL D10MS
; ACALL D10MS
; JB P3.3,K5
; ACALL K4P;VFLINE CHOICE
; SJMP EXIT
;K5: MOV 23H,#7FH
; ACALL DISPLAY
; JB P3.3,EXIT
; ACALL D10MS
; ACALL D10MS
; JB P3.3,EXIT
; ACALL K5P;ZHEN FAN ZHUAN
EXIT: ; ACALL SPEED
MOV 23H,#00H
ACALL DISPLAY
SETB EA
POP B
POP PSW
POP ACC
RETI
;-----------K1P-------------
;STOP AND RUN
K1P: JNB P3.3,$
CPL 20H.1
;ACALL SPEED
RET
;------------K2P--------------
;ADD FREQUENCY
K2P: JNB P3.3,$
MOV A,KEY_BUF
CJNE A,#3CH,K2NXT
SJMP K2EXT
K2NXT: INC KEY_BUF
MOV A,KEY_BUF
MOV B,#0AH
DIV AB
SWAP A
ORL A,B
MOV LED21,A ;DISPLAY
MOV FPW,KEY_BUF
ACALL CHTAB
MOV A,LED21
MOVC A,@A+DPTR
MOV APW,A
K2EXT: ;ACALL SPEED
RET
;-----------K3P------------
;DEC FREQUENCY
K3P: JNB P3.3,$
MOV A,KEY_BUF
CJNE A,#00H,K3NXT
SJMP K3EXT
K3NXT: DEC KEY_BUF
MOV A,KEY_BUF
MOV B,#0AH
DIV AB
SWAP A
ORL A,B
MOV LED21,A
MOV FPW,KEY_BUF
ACALL CHTAB
MOV A,LED21
MOVC A,@A+DPTR
MOV APW,A
K3EXT: ;ACALL SPEED
RET
;----------K4P------------
;CHANGE TEH VFTAB
K4P: JNB P3.3,$
MOV A,VF_TAB
CJNE A,#06H,K4NXT
MOV VF_TAB,#00H
SJMP K4EXT
K4NXT: INC VF_TAB
K4EXT: NOP
RET
;-------------K5P-------------
;ZHNE FAN ZHAUN
;FIRST STOP RUN IN 0.1S
;THEN CHANG THE FANXIANG
K5P: JNB P3.3,$
CLR 20H.1 ;SHUT SPWM
ACALL SPEED
;ACALL D10MS
;ACALL D10MS
;ACALL D10MS
CPL 20H.0
SETB 20H.1
K5EXT: ;ACALL SPEED
RET
;-----------------D10MS--------
D10MS: MOV TH0,#0D8H
MOV TL0,#0F0H
CLR TF0
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
;-------------------------------
CHTAB: MOV A,VF_TAB
TABLE10: CJNE A,#00H,TABLE11
MOV DPTR,#TABLE0
SJMP CHEXT
TABLE11: CJNE A,#01H,TABLE12
MOV DPTR,#TABLE1
SJMP CHEXT
TABLE12: CJNE A,#02H,TABLE13
MOV DPTR,#TABLE2
SJMP CHEXT
TABLE13: CJNE A,#03H,TABLE14
MOV DPTR,#TABLE3
SJMP CHEXT
TABLE14: CJNE A,#04H,TABLE15
MOV DPTR,#TABLE4
SJMP CHEXT
TABLE15: CJNE A,#05H,CHEXT
MOV DPTR,#TABLE5
MOV VF_TAB,#00H
CHEXT: NOP
RET
;--------DISPLAY-----------
DISPLAY: ACALL PTDS
MOV A,VF_TAB
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV LED3,A
MOV LED4,23H
MOV R0,#LED1
MOV R1,#04H
URATN: MOV SCON,#00H
CLR TI
URATNO: MOV A,@R0
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R1,URATNO
NOP
RET
PTDS: MOV R0,#LED21
MOV R1,#LED1
MOV A,@R0
PUSH ACC
ANL A,#0FH
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV @R1,A
POP ACC
INC R1
SWAP A
ANL A,#0FH
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV @R1,A
NOP
RET
LEDTAB: DB 0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4
DB 92H,82H,0F8H,80H,90H;5,6,7,8,9
发表时间:2003年5月25日16:12:21