我正在接受输入并将它们存储在寄存器 R1 和 R2 中。然后我使用CJNE
命令执行比较,如果存储在 R1 或 R2 中的输入与数组中的数据匹配,我会做一些事情。但问题出在以下代码中,有时 R1 和 R2 有数据,有时没有。我已经通过调试模式验证了它并在端口上显示了它们里面的东西。为什么会发生这种情况,我做错了什么?
以下程序是编写intel 8051 assembly
并组装在Keil uVision
请检查代码:
ORG 00H
UserName: DB 12,13,14,0
Password: DB 15,125,240,0
MOV R0,#00h
mov R6,#04h
mov P1,#00h
mov p2,#00h
TakeUserName:
JB P2.1, TakePassword
mov R1,P1 // storing username number in R1
SJMP TakeUserName
TakePassword:
JB P2.2, CheckUserName
mov R2,P1 // storing password number in R2
SJMP TakePassword
CheckUserName:
MOV DPTR,#UserName
Here1:
CLR A
MOVC A, @A+DPTR
INC DPTR
CJNE A, 01h,Here1 // compare A with data in R1
mov p2,#00h
Setb P2.0
AJMP CheckPassword
CheckPassword:
MOV DPTR,#Password
Here:
CLR A
MOVC A, @A+DPTR
INC DPTR
CJNE A, 02h,Here
Setb P2.1 // setting of this bit shows password is successfully matched
AJMP Exit
End
请指导我找出这种奇怪行为的原因。
问候