以下是一個我寫的一個51單片機的秒表顯示程序,要求計時范圍是0.000--999.9,精度為0.1秒。有兩個開關控制,一個控制計時開始,一個控制計時結束。但是在實驗室編譯沒有問題,卻調不出要的效果來,LED數碼管那四位一開始應該顯示000.0的,但是上來確實000.0.,右邊多了一個小數點,我改成左循環的話就是00.0.0,左邊就會多出一個小數點,很是郁悶。希望與高手能幫忙指點一下哪里有問題···
ORG 0000H
MIAN:
MOV 30H,#0H
MOV 31H,#0H
MOV 32H,#0AH
MOV 33H,#0H;緩沖單元初始化
MOV R3,#0AH
MOV R4,#0AH
MOV R5,#0AH
MOV R6,#0AH;循環次數初始化
X0:
MOV C,P1.0
JC X2;判斷是否開始計時
MOV C,P1.1
JC X6;判斷是否停止計時
MOV A,#20H;位地址
MOV R0,#30H;指向緩沖單元
X1:
MOV R1,#21H; 位選碼
PUSH ACC
MOVX @R1,A
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R1,#22H;段選碼
MOVX @R1,A
POP ACC
JB ACC.2,X0;是否到末尾,是則跳
RR A
INC R0
LJMP X1
X2:
LCALL DELAY
MOV R0,#33H
INC @R0
DJNZ R3,X0
X3:
MOV R0,#32H
INC @R0
DJNZ R4,X0
X4:
MOV R0,#31H
INC @R0
DJNZ R5,X0
X5:
MOV R0,#30H
INC @R0
DJNZ R6,X0
X6: SJMP $
DELAY:
MOV R2,#02H
LP: MOV TMOD,#01H
MOV TH0,#30H
MOV TL0,#0B0H
SETB TR0
LOOP: JBC TF0,NEXT
SJMP LOOP
NEXT: DJNZ R2,LP
RET ;0.1秒延時
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,40H,79H,24H,30H,19H,12H,02H,78H,0H,10H;后十個為帶小數點的十個數字
END