标题:
[紧急求助]大家帮忙看一段程序
[打印本页]
作者:
ppu428
时间:
2009-8-29 09:06
标题:
[紧急求助]大家帮忙看一段程序
大家看一下这个程序,我想让单片机显示RIGHT,但是一直显示ERROR:
显示子程序DISPLAY是正确的,大家不用看了,就是比较密码子程序TEST的问题?
我测试时把最后三行改为 :R: SETB MMRE
RET
END
显示RIGHT,这时程序的执行流程与原先相同(不关程序逻辑正误问题)。
程序:
MMRE EQU 00H ;密码正确与否标志,用位寻址区第一位为标志
ORG 0050H
TABLE0: DB 79H,77H,77H,3FH,77H ;显示:ERROR
TABLE1: DB 77H,30H,7DH,76H,02H ;显示:RIGHT
TABLE2: DB 07H,0BH,0FH,13H,17H,1BH,1FH,23H ;密码:1 2 3 4 5 6 7 8
;-------------------------------主程序入口-------------------------------------
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV 30H,#07H ;用八字节存储正确的密码
MOV 31H,#0BH
MOV 32H,#0FH
MOV 33H,#13H
MOV 34H,#17H
MOV 35H,#1BH
MOV 36H,#1FH
MOV 37H,#23H
LCALL TEST ;就这个比较密码子程序的问题?
MOV C,MMRE ;根据标志位选择不同的显示内容
JC M2
MOV DPTR,#TABLE0 ;显示:ERROR
SJMP M3
M2: MOV DPTR,#TABLE1 ;显示:RIGHT
M3: MOV R3,#5
LCALL DISPLAY ;调用显示子程序,循环
LJMP MAIN
;--------------------------------显示子程序------------------------------------
DISPLAY: MOV P2,#0 ;清0复位
ANL P1,#0F8H ;用与保护P1口高5位不受影响,将低三位清0,
;选择第一个数码管
MOV R4,#0
L2: MOV A,R4
MOVC A,@A+DPTR ;用查表法得到A对应在表中的段值
MOV P2,A ;输出显示
LCALL DELAY0 ;加入延时,使每位显示保持一段时间
MOV P2,#0 ;延时过后,清0,为下一位显示做准备
INC R4 ;移到下一个数据
DJNZ R3,L3 ;显示完指定个数返回,否则进入下一个显示
RET
L3: INC P1 ;选择下一位数码管
SJMP L2
;---------------------------------延时子程序-----------------------------------
DELAY0: MOV R5,#20
DJNZ R5,$
RET
;----------------------------测试密码正确与否子程序----------------------------
TEST: MOV R0,#30H
MOV DPTR,#TABLE2
MOV R2,#0
COMP: MOV A,R2
MOVC A,@A+DPTR
MOV 0FFH,A
MOV A,@R0
CJNE A,0FFH,R
INC R0
INC R2
CJNE R0,#38H,COMP
SETB MMRE
R: RET
END
/********************************** END OF FILE ******************************/
作者:
ppu428
时间:
2009-8-29 09:11
就是最后这一段程序:
TEST: MOV R0,#30H
MOV DPTR,#TABLE2
MOV R2,#0
COMP: MOV A,R2
MOVC A,@A+DPTR
MOV 0FFH,A
MOV A,@R0
CJNE A,0FFH,R
INC R0
INC R2
CJNE R0,#38H,COMP
SETB MMRE
R: RET
我调试时也走到 SETB MMRE ,如果在这个子程序的其它地方 写上 SETB MMRE 显示:REIGHT,但是源程序执行了 SETB MMRE 但是现实:ERROR?
作者:
紫日
时间:
2009-8-29 17:04
CJNE R0,#38H,COMP
你去把书看下,然后把CJNE这个指令的含义好好的理解下。希望你能够深刻的理解掉它。
作者:
紫日
时间:
2009-8-29 17:04
ret是结束,你还要检查SETB MMRE这个指令是为了什么服务的。
作者:
幽梦与共
时间:
2009-8-29 21:01
MOV R2,#0
COMP: MOV A,R2
MOVC A,@A+DPTR
A中为显示内容,根据你的语句,A中的内容始终为0;
作者:
nishibeitina
时间:
2009-10-26 20:14
好好看书
作者:
nishibeitina
时间:
2009-10-26 20:14
我也不会
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1