导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教高手:程序转移问题。[gmf2008]

 *第12607篇: 请教高手:程序转移问题。

  
楼 主:gmf2008 2003年5月25日16:12
 请教高手:程序转移问题。
各位论坛好友: 
        我近日写了一个用四块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 
  
2楼:红心J 2003年5月26日10:36
 太长,没细看,这个程序应该不长.
提醒

太长,没细看,这个程序应该不长.
提醒:不应只是初始化时使第1片164输出全0,而是每次测试键盘时都应如此.

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:pic16f876市价多少?

[下一篇主题]:[求助]老板要求的PICU要到期了,我实在没辙,大家帮忙!!!