发表于:2004/2/21 11:15:00
#0楼
我是新手,在做学校布置的课题,遇到难题,请前辈们不吝指教!
具体情况是这样的:
要求:有4个按键A、B、C、D,4个7段电子显示管, A键选择 电机运转 的状态:高速正转、高速反转、低速正转、低速反转、每步角度正转、每步角度反转, B键 转速加,C键 转速减,D键确定。同时显示管要显示当前状态和转速。 A键按下不放的话,每1s转换一个状态,B C 键按住不放要有连加 连减 的功能.
我还在设计显示模块,就遇到问题了,我的程序如下:ORG 0000H
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INPUT
ORG 000BH
AJMP TIMER
ORG 0100H
HPB EQU 30H
LPB EQU 31H
HNB EQU 32H
LNB EQU 33H
RPB EQU 34H
RNB EQU 35H
SPEEDL EQU 36H
SPEEDH EQU 37H
RADS EQU 38H
;40H-43H单元 用于显示
MAIN: MOV SP,#70H
ACALL INIT
M1: ACALL DISPLY2
SJMP M1
INIT: MOV DPTR,#0BF00H
MOV A,#03H
MOVX @DPTR,A
MOV TMOD,#01H
MOV TL0,#3CH
MOV TH0,#0F6H
CLR IT0 ;外部中断0 设置为电平触发方式。
CLR 01H
MOV R7,#0FEH
MOV R4,#00H
MOV R0,#SPEEDL
MOV @R0,#0
MOV R0,#SPEEDH
MOV @R0,#0
MOV R0,#RADS
MOV @R0,#0
MOV R0,#30H ;HPB--RNB 放进 字母偏移量
MOV A,#0AH
M2: MOV @R0,A
INC A
INC R0
CJNE A,#10H,M2
MOV R0,#40H ;40H-41H单元清0
MOV A,#3
M3: MOV @R0,#0H
INC R0
DEC A
JNZ M3
MOV A,#10H ;40H-41H单元装入初始显示FREE偏移量
MOV R0,#40H
M4: MOV @R0,A
INC A
INC R0
CJNE A,#14H,M4
SETB TR0
SETB ET0
SETB EX0
SETB EA
RET
TIMER:MOV TL0,#3CH ;计时5ms
MOV TH0,#0F6H
SETB 01H
RETI
; INPUT: ;按键 服务程序,R4记录状态1-6
; CLR EX0
; MOV A,R7
; JB ACC.0,K1
; INC R4
; MOV A,R4
; MOV R0,#040H
; HP:CJNE A,#01H,LP
; MOV @R0,HPB
; SJMP BBB
; LP:CJNE A,#02H,HN
; MOV @R0,LPB
; SJMP BBB
;
; HN:CJNE A,#03H,LN
; MOV @R0,HNB
; SJMP BBB
; LN:CJNE A,#04H,RP
; MOV @R0,LNB
; SJMP BBB
; RP:CJNE A,#05H,RN
; MOV @R0,RPB
; SJMP BBB
; RN:CJNE A,#06H,AAA
; MOV @R0,RNB
; SJMP BBB
; AAA:MOV R4,#01H
; MOV A,R4
; SJMP HP
; BBB:ACALL DISPLY2
; SJMP $
; K1:JB ACC.1,K2
; MOV R0,#SPEEDL
; INC @R0
;
; SJMP K0
; K2:JB ACC.2,K3
; MOV R0,#SPEEDL
; DEC @R0
; SJMP K0
; K3:
; K0:
; ACALL DELAY1S
; SETB EX0
; RETI
; DELAY1S:
; PUSH PSW
; SETB RS0
; MOV R0,#0C8H
; W1:JNB 01H,W1
; CLR 01H
; DEC R0
; JNZ W1
; CLR RS0
; POP PSW
; RET
TABLE0: DB 3FH, 6FH, 5BH, 4FH, 66H, 6DH, 7DH, 7H, 7FH, 6FH;数字,00H-09H
DB 76H,38H;高低正转0AH,0BH
DB 0F6H,0B8H;高低反转0CH,0DH
DB 77H,0F7H;角度正反转 0EH,0FH
DB 71H,77H,79H,79H;FREE:10H,11H,12H,13H
DISPLY2:
MOV R0,#40H
; MOV R5,#0
L9: JNB 01H,L9
CLR 01H
; INC R5
; CJNE R5,#100,L10
; SETB EX0
; MOV R5,#0
L10: MOV DPTR,#TABLE0
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#0BF01H
MOVX @DPTR,A
INC R0
MOV DPTR,#0BF02H
MOV A,R7
MOVX @DPTR,A
RL A
MOV R7,A
CJNE A,#0EFH,L9
MOV R7,#0FEH
MOV R0,#40H
RET
END
上面的程序 在单步运行的时候,没有任何问题,但如果连续运行,机器就没有反应了.我反复试了好久,实在不知该怎么办了..
具体情况是这样的:
要求:有4个按键A、B、C、D,4个7段电子显示管, A键选择 电机运转 的状态:高速正转、高速反转、低速正转、低速反转、每步角度正转、每步角度反转, B键 转速加,C键 转速减,D键确定。同时显示管要显示当前状态和转速。 A键按下不放的话,每1s转换一个状态,B C 键按住不放要有连加 连减 的功能.
我还在设计显示模块,就遇到问题了,我的程序如下:ORG 0000H
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INPUT
ORG 000BH
AJMP TIMER
ORG 0100H
HPB EQU 30H
LPB EQU 31H
HNB EQU 32H
LNB EQU 33H
RPB EQU 34H
RNB EQU 35H
SPEEDL EQU 36H
SPEEDH EQU 37H
RADS EQU 38H
;40H-43H单元 用于显示
MAIN: MOV SP,#70H
ACALL INIT
M1: ACALL DISPLY2
SJMP M1
INIT: MOV DPTR,#0BF00H
MOV A,#03H
MOVX @DPTR,A
MOV TMOD,#01H
MOV TL0,#3CH
MOV TH0,#0F6H
CLR IT0 ;外部中断0 设置为电平触发方式。
CLR 01H
MOV R7,#0FEH
MOV R4,#00H
MOV R0,#SPEEDL
MOV @R0,#0
MOV R0,#SPEEDH
MOV @R0,#0
MOV R0,#RADS
MOV @R0,#0
MOV R0,#30H ;HPB--RNB 放进 字母偏移量
MOV A,#0AH
M2: MOV @R0,A
INC A
INC R0
CJNE A,#10H,M2
MOV R0,#40H ;40H-41H单元清0
MOV A,#3
M3: MOV @R0,#0H
INC R0
DEC A
JNZ M3
MOV A,#10H ;40H-41H单元装入初始显示FREE偏移量
MOV R0,#40H
M4: MOV @R0,A
INC A
INC R0
CJNE A,#14H,M4
SETB TR0
SETB ET0
SETB EX0
SETB EA
RET
TIMER:MOV TL0,#3CH ;计时5ms
MOV TH0,#0F6H
SETB 01H
RETI
; INPUT: ;按键 服务程序,R4记录状态1-6
; CLR EX0
; MOV A,R7
; JB ACC.0,K1
; INC R4
; MOV A,R4
; MOV R0,#040H
; HP:CJNE A,#01H,LP
; MOV @R0,HPB
; SJMP BBB
; LP:CJNE A,#02H,HN
; MOV @R0,LPB
; SJMP BBB
;
; HN:CJNE A,#03H,LN
; MOV @R0,HNB
; SJMP BBB
; LN:CJNE A,#04H,RP
; MOV @R0,LNB
; SJMP BBB
; RP:CJNE A,#05H,RN
; MOV @R0,RPB
; SJMP BBB
; RN:CJNE A,#06H,AAA
; MOV @R0,RNB
; SJMP BBB
; AAA:MOV R4,#01H
; MOV A,R4
; SJMP HP
; BBB:ACALL DISPLY2
; SJMP $
; K1:JB ACC.1,K2
; MOV R0,#SPEEDL
; INC @R0
;
; SJMP K0
; K2:JB ACC.2,K3
; MOV R0,#SPEEDL
; DEC @R0
; SJMP K0
; K3:
; K0:
; ACALL DELAY1S
; SETB EX0
; RETI
; DELAY1S:
; PUSH PSW
; SETB RS0
; MOV R0,#0C8H
; W1:JNB 01H,W1
; CLR 01H
; DEC R0
; JNZ W1
; CLR RS0
; POP PSW
; RET
TABLE0: DB 3FH, 6FH, 5BH, 4FH, 66H, 6DH, 7DH, 7H, 7FH, 6FH;数字,00H-09H
DB 76H,38H;高低正转0AH,0BH
DB 0F6H,0B8H;高低反转0CH,0DH
DB 77H,0F7H;角度正反转 0EH,0FH
DB 71H,77H,79H,79H;FREE:10H,11H,12H,13H
DISPLY2:
MOV R0,#40H
; MOV R5,#0
L9: JNB 01H,L9
CLR 01H
; INC R5
; CJNE R5,#100,L10
; SETB EX0
; MOV R5,#0
L10: MOV DPTR,#TABLE0
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#0BF01H
MOVX @DPTR,A
INC R0
MOV DPTR,#0BF02H
MOV A,R7
MOVX @DPTR,A
RL A
MOV R7,A
CJNE A,#0EFH,L9
MOV R7,#0FEH
MOV R0,#40H
RET
END
上面的程序 在单步运行的时候,没有任何问题,但如果连续运行,机器就没有反应了.我反复试了好久,实在不知该怎么办了..