汇编语言:使用以下程序,用proteus仿真。为什么LED最后全亮了?
ORG0050HSWITCH:JNBP3.0,STARTJMPSWITCHSTART:JNBP3.1,LEFTJNBP3.2,RIGHTLEFT:MOVDPTR,#TAB...
ORG 0050H
SWITCH:
JNB P3.0,START
JMP SWITCH
START:
JNB P3.1,LEFT
JNB P3.2,RIGHT
LEFT:
MOV DPTR,#TABLE
L1: CLR A
MOVC A,@A+DPTR
CJNE A,007H,LOOP1
JNB P3.0,S1
JMP SWITCH
S1: JNB P3.2,RIGHT
JNB P3.1,LEFT
LOOP1:
MOV P1,A
LCALL DELAY
INC DPTR
JMP L1
TABLE:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DB 007H
RIGHT:
MOV A,#07FH
MOV R0,#8
LOOP3:
MOV P1,A
SETB C
RRC A
LCALL DELAY
DEC R0
CJNE R0,#0,LOOP3
JNB P3.0,L2
AJMP SWITCH
L2: JNB P3.1,LEFT
JNB P3.2,RIGHT
DELAY:
MOV R3,#20
D0:
MOV R4,#20
D1:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
DJNZ R3,D0
RET
END
P3.0是作为总开关p3.1和P3.2是2个分开关控制2个循环 展开
SWITCH:
JNB P3.0,START
JMP SWITCH
START:
JNB P3.1,LEFT
JNB P3.2,RIGHT
LEFT:
MOV DPTR,#TABLE
L1: CLR A
MOVC A,@A+DPTR
CJNE A,007H,LOOP1
JNB P3.0,S1
JMP SWITCH
S1: JNB P3.2,RIGHT
JNB P3.1,LEFT
LOOP1:
MOV P1,A
LCALL DELAY
INC DPTR
JMP L1
TABLE:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DB 007H
RIGHT:
MOV A,#07FH
MOV R0,#8
LOOP3:
MOV P1,A
SETB C
RRC A
LCALL DELAY
DEC R0
CJNE R0,#0,LOOP3
JNB P3.0,L2
AJMP SWITCH
L2: JNB P3.1,LEFT
JNB P3.2,RIGHT
DELAY:
MOV R3,#20
D0:
MOV R4,#20
D1:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
DJNZ R3,D0
RET
END
P3.0是作为总开关p3.1和P3.2是2个分开关控制2个循环 展开
4个回答
展开全部
说说你的3 个按键各实现什么功能 ?
因为你的实现什么还没说清,只好这样改。先按下1键,如2键按下,灯左移到左一亮。如按下3键,灯右移到右一亮。再按一键,重新开始。
ORG 0000H
SWITCH:
JNB P3.0,START
JMP SWITCH
START:
JNB P3.1,LEFT
JNB P3.2,RIGHT
AJMP START ;加了这条,不然,按键1按下后,2、3未按,会接着执行LEFT子程序
LEFT:
MOV DPTR,#TABLE
L1: CLR A
MOVC A,@A+DPTR
CJNE A,#07H,LOOP1
JNB P3.0,S1
JMP SWITCH
S1: JNB P3.2,RIGHT
JNB P3.1,LEFT
AJMP S1 ;加了这条,按键2、3未按下,返回直到按下其中一个。不然,未按2、3键,同样会继续执行LOOP1.
LOOP1:
MOV P1,A
LCALL DELAY
INC DPTR
JMP L1
TABLE:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DB 007H
RIGHT:
MOV A,#07FH
MOV R0,#8
LOOP3:
MOV P1,A
SETB C
RRC A
LCALL DELAY
DEC R0
CJNE R0,#0,LOOP3
JNB P3.0,L2
AJMP SWITCH
L2: JNB P3.1,LEFT
JNB P3.2,RIGHT
DELAY:
MOV R3,#20
D0:
MOV R4,#20
D1:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
DJNZ R3,D0
RET
END
因为你的实现什么还没说清,只好这样改。先按下1键,如2键按下,灯左移到左一亮。如按下3键,灯右移到右一亮。再按一键,重新开始。
ORG 0000H
SWITCH:
JNB P3.0,START
JMP SWITCH
START:
JNB P3.1,LEFT
JNB P3.2,RIGHT
AJMP START ;加了这条,不然,按键1按下后,2、3未按,会接着执行LEFT子程序
LEFT:
MOV DPTR,#TABLE
L1: CLR A
MOVC A,@A+DPTR
CJNE A,#07H,LOOP1
JNB P3.0,S1
JMP SWITCH
S1: JNB P3.2,RIGHT
JNB P3.1,LEFT
AJMP S1 ;加了这条,按键2、3未按下,返回直到按下其中一个。不然,未按2、3键,同样会继续执行LOOP1.
LOOP1:
MOV P1,A
LCALL DELAY
INC DPTR
JMP L1
TABLE:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DB 007H
RIGHT:
MOV A,#07FH
MOV R0,#8
LOOP3:
MOV P1,A
SETB C
RRC A
LCALL DELAY
DEC R0
CJNE R0,#0,LOOP3
JNB P3.0,L2
AJMP SWITCH
L2: JNB P3.1,LEFT
JNB P3.2,RIGHT
DELAY:
MOV R3,#20
D0:
MOV R4,#20
D1:
MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
DJNZ R3,D0
RET
END
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把程序更改一下,
P3.1有效时送P1口0FEH
P3.2有效时送P1口07FH
看看正常不?
如果不正常,继续检查基本电路和基本程序.
如果正常,不要直接做循环,做最直接的程序.
给P1口送0FEH,延迟
送0FDH,延迟
送0FBH,延迟
...
送07FH,延迟.
如果正常,再缩减为循环程序.
P3.1有效时送P1口0FEH
P3.2有效时送P1口07FH
看看正常不?
如果不正常,继续检查基本电路和基本程序.
如果正常,不要直接做循环,做最直接的程序.
给P1口送0FEH,延迟
送0FDH,延迟
送0FBH,延迟
...
送07FH,延迟.
如果正常,再缩减为循环程序.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
4个拼一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询