|
大家看一下這個(gè)程序,我想讓單片機(jī)顯示RIGHT,但是一直顯示ERROR:
顯示子程序DISPLAY是正確的,大家不用看了,就是比較密碼子程序TEST的問(wèn)題?
我測(cè)試時(shí)把最后三行改為 :R: SETB MMRE RET END 顯示RIGHT,這時(shí)程序的執(zhí)行流程與原先相同(不關(guān)程序邏輯正誤問(wèn)題)。
程序: MMRE EQU 00H ;密碼正確與否標(biāo)志,用位尋址區(qū)第一位為標(biāo)志
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 ;用八字節(jié)存儲(chǔ)正確的密碼 MOV 31H,#0BH MOV 32H,#0FH MOV 33H,#13H MOV 34H,#17H MOV 35H,#1BH MOV 36H,#1FH MOV 37H,#23H
LCALL TEST ;就這個(gè)比較密碼子程序的問(wèn)題?
MOV C,MMRE ;根據(jù)標(biāo)志位選擇不同的顯示內(nèi)容 JC M2 MOV DPTR,#TABLE0 ;顯示:ERROR SJMP M3 M2: MOV DPTR,#TABLE1 ;顯示:RIGHT M3: MOV R3,#5 LCALL DISPLAY ;調(diào)用顯示子程序,循環(huán) LJMP MAIN
;--------------------------------顯示子程序------------------------------------ DISPLAY: MOV P2,#0 ;清0復(fù)位 ANL P1,#0F8H ;用與保護(hù)P1口高5位不受影響,將低三位清0, ;選擇第一個(gè)數(shù)碼管 MOV R4,#0 L2: MOV A,R4 MOVC A,@A+DPTR ;用查表法得到A對(duì)應(yīng)在表中的段值 MOV P2,A ;輸出顯示 LCALL DELAY0 ;加入延時(shí),使每位顯示保持一段時(shí)間 MOV P2,#0 ;延時(shí)過(guò)后,清0,為下一位顯示做準(zhǔn)備 INC R4 ;移到下一個(gè)數(shù)據(jù) DJNZ R3,L3 ;顯示完指定個(gè)數(shù)返回,否則進(jìn)入下一個(gè)顯示 RET L3: INC P1 ;選擇下一位數(shù)碼管 SJMP L2
;---------------------------------延時(shí)子程序----------------------------------- DELAY0: MOV R5,#20 DJNZ R5,$ RET ;----------------------------測(cè)試密碼正確與否子程序---------------------------- 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 ******************************/
|
|