大家看一下這個程序,我想讓單片機顯示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 ******************************/
|