我写了一个单片机的汇编语言,汇编没问题,但是调试的时候效果不理想,求助
目的是,三个按键,按下K1,流水灯左移,按下K2,流水灯右移,同时按下,则不亮,汇编的时候也没问题,但是调试的时候,流水灯只能左移,求救,下面附上语言内容ORG0000H...
目的是,三个按键,按下K1,流水灯左移,按下K2,流水灯右移,同时按下,则不亮,汇编的时候也没问题,但是调试的时候,流水灯只能左移,求救,下面附上语言内容
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:MOV A,P3
CJNE A,#003H,NO1
LJMP MAIN
NO1:CJNE A,#001H,NO2
LJMP K1
NO2:CJNE A,#002H,MAIN
LJMP K2
K1:MOV A,#0EFH
LOOP:MOV P2,A
LCALL D_1S
RL A
AJMP LOOP
K2:MOV A,#000H
LOOP1:MOV P2,A
LCALL D_1S
RR A
AJMP LOOP1
D_1S:MOV R6,#100
D10MS:MOV R5,#40
DL:MOV R4,#123
NOP
DJNZ R4,$
DJNZ R5,DL
DJNZ R6,D10MS
RET
END
流程图在这
另外题目要求,,K1和K2同时按下的时候两个灯也不亮 展开
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:MOV A,P3
CJNE A,#003H,NO1
LJMP MAIN
NO1:CJNE A,#001H,NO2
LJMP K1
NO2:CJNE A,#002H,MAIN
LJMP K2
K1:MOV A,#0EFH
LOOP:MOV P2,A
LCALL D_1S
RL A
AJMP LOOP
K2:MOV A,#000H
LOOP1:MOV P2,A
LCALL D_1S
RR A
AJMP LOOP1
D_1S:MOV R6,#100
D10MS:MOV R5,#40
DL:MOV R4,#123
NOP
DJNZ R4,$
DJNZ R5,DL
DJNZ R6,D10MS
RET
END
流程图在这
另外题目要求,,K1和K2同时按下的时候两个灯也不亮 展开
4个回答
展开全部
汇编编译通过不等于程序没问题:
1,缺乏两个按键同时按下的程序;
2,由于K1,K2模块死循环,程序没有返回,每次都要重启电源或手动复位单片,才能通过按键 改变程序走向;
3,按键没有去抖动处理容易出现误判断。
4,K1的键值是001H,K2的值是002H,那么两个按键同时按下应该是003H吧,003H不是没有按键按下的状态吗?
按键按下时口线的状态到底是0还是1?
先为你稍作修改如下:
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN: MOV A,P3
CJNE A,#003H,NO1 ;等待按键按下
LJMP MAIN
NO1: CJNE A,#001H,NO2
LJMP K1 ;等于001H跳K1
NO2: CJNE A,#002H,MAIN
LJMP K2 ;等于002H跳K2
;两个按按键同时按下的程序在哪里呢?
K1: MOV A,#0EFH ;K1程序模块
MOV R3,#08H ;增加这一行
LOOP: MOV P2,A
LCALL D_1S
RL A
DJNZ R3,LOOP ;改动这两行
AJMP MAIN ;返回继续检测按键
K2: MOV A,#000H ;K2程序模块
MOV R3,#08H ;增加这一行
LOOP1:MOV P2,A
LCALL D_1S
RR A
DJNZ R3,LOOP1 ;改动这两行
AJMP MAIN ;返回继续检测按键
D_1S: MOV R6,#100 ;延时模块
D10MS:MOV R5,#40
DL: MOV R4,#123
NOP
DJNZ R4,$
DJNZ R5,DL
DJNZ R6,D10MS
RET
END
1,缺乏两个按键同时按下的程序;
2,由于K1,K2模块死循环,程序没有返回,每次都要重启电源或手动复位单片,才能通过按键 改变程序走向;
3,按键没有去抖动处理容易出现误判断。
4,K1的键值是001H,K2的值是002H,那么两个按键同时按下应该是003H吧,003H不是没有按键按下的状态吗?
按键按下时口线的状态到底是0还是1?
先为你稍作修改如下:
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN: MOV A,P3
CJNE A,#003H,NO1 ;等待按键按下
LJMP MAIN
NO1: CJNE A,#001H,NO2
LJMP K1 ;等于001H跳K1
NO2: CJNE A,#002H,MAIN
LJMP K2 ;等于002H跳K2
;两个按按键同时按下的程序在哪里呢?
K1: MOV A,#0EFH ;K1程序模块
MOV R3,#08H ;增加这一行
LOOP: MOV P2,A
LCALL D_1S
RL A
DJNZ R3,LOOP ;改动这两行
AJMP MAIN ;返回继续检测按键
K2: MOV A,#000H ;K2程序模块
MOV R3,#08H ;增加这一行
LOOP1:MOV P2,A
LCALL D_1S
RR A
DJNZ R3,LOOP1 ;改动这两行
AJMP MAIN ;返回继续检测按键
D_1S: MOV R6,#100 ;延时模块
D10MS:MOV R5,#40
DL: MOV R4,#123
NOP
DJNZ R4,$
DJNZ R5,DL
DJNZ R6,D10MS
RET
END
追问
MAIN : MOV A,P3 ;从P3口读取数据
CJNE A,#003H,NO1 ;A的数据跟003H比较,不相等的话 跳转到NO1
LJMP MAIN ;相等的话 跳转到主程序
(K1和K2同时按下的话,跳转到主程序了啊,不对吗?)
追答
我明白了,“同时按下,则不亮”这句话的意思了。因为发现程序没有对I/O初始化,才提出这个问题的。倘诺程序在循环中有LED亮,即使两个按键同时按下,LED也是不会灭的。另外,K1、K2模块的第一句MOV A,#XXXH好像也有问题,K1改为MOV A,#0FEH,K2改为MOV A,#07FH更合适,请检查一下你的程序。
展开全部
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:
MOV A,P3
NO12: CJNE A,#003H,NO1
LJMP MAIN
NO1: CJNE A,#001H,NO2
LJMP K1
NO2: CJNE A,#002H,MAIN
LJMP K2
K1: MOV B,#0EFH
LOOP: MOV A,B
MOV P2,A
LCALL D_1S
RL A
MOV B,A
MOV A,P3
key12: CJNE A,#003H,key2
JMP MAIN
key2: CJNE A,#001H,LOOP
JMP K2
; AJMP LOOP
K2: MOV B,#000H
LOOP1: MOV A,B
MOV P2,A
LCALL D_1S
RR A
MOV B,A
MOV A,P3
key21: CJNE A,#003H,key1
JMP MAIN
key1: CJNE A,#001H,LOOP1
JMP K1
; AJMP LOOP1
D_1S: MOV R6,#100
D10MS: MOV R5,#40
DL: MOV R4,#123
NOP
DJNZ R4,$
DJNZ R5,DL
DJNZ R6,D10MS
RET
END
;K2: MOV B,#000H????????
;LOOP1: MOV A,B???????
顺着你的思路修改了一下,程序还是有问题的,自己再改改吧,只能帮你到这了
LJMP MAIN
ORG 0060H
MAIN:
MOV A,P3
NO12: CJNE A,#003H,NO1
LJMP MAIN
NO1: CJNE A,#001H,NO2
LJMP K1
NO2: CJNE A,#002H,MAIN
LJMP K2
K1: MOV B,#0EFH
LOOP: MOV A,B
MOV P2,A
LCALL D_1S
RL A
MOV B,A
MOV A,P3
key12: CJNE A,#003H,key2
JMP MAIN
key2: CJNE A,#001H,LOOP
JMP K2
; AJMP LOOP
K2: MOV B,#000H
LOOP1: MOV A,B
MOV P2,A
LCALL D_1S
RR A
MOV B,A
MOV A,P3
key21: CJNE A,#003H,key1
JMP MAIN
key1: CJNE A,#001H,LOOP1
JMP K1
; AJMP LOOP1
D_1S: MOV R6,#100
D10MS: MOV R5,#40
DL: MOV R4,#123
NOP
DJNZ R4,$
DJNZ R5,DL
DJNZ R6,D10MS
RET
END
;K2: MOV B,#000H????????
;LOOP1: MOV A,B???????
顺着你的思路修改了一下,程序还是有问题的,自己再改改吧,只能帮你到这了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你先按右移可以吗?要是可以就是你程序在执行完以后没有回到一开始的地方
追问
我刚才修改了一下,先按右移的话,就只能右移,应该是没有回到开始的地方,你能帮我修改一下吗?谢谢
追答
加个循环吧 好久不看汇编了 有点看不懂 应该是你在每次右移和左移完后加个跳转回到main那里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询