作者waynecone (wayne)
看板ASM
標題一個不知道是89S52硬體本身還是程式有錯的問題?
時間Fri Mar 6 02:13:04 2009
最近在練習8051的程式,發現在使用查表法作0到9的數字跑馬燈時
當我的程式只要是把CALL DELAY放到INC R0或是DEC R0的後面,
接上硬體電路時就會誤動作!
不知道是不是我的邏輯上有錯誤沒發現,所以我把程式碼全部出來
麻煩大家幫我看看是我的邏輯上有錯還是真的是這顆單晶片本身的
問題??感謝大家的幫忙了!!
程式碼如下:
ORG 00H
MOV DPTR#TABLE
START:
MOV R0,#0
MOV R1,#10
LOOP:
MOV A,R0
MOVC A,@A+DPTR
MOV P1,A
CALL DELAY
INC R0
DJNZ R1,LOOP
JMP START
DELAY:
MOV R5,#10
S1:
MOV R6,#250
S2:
MOV R7,#200
DJNZ R7,$
DJNZ R6,S2
DJNZ R5,S1
RET
TABLE:
DB 01H
DB 4FH
DB 12H
DB 06H
DB 4CH
DB 24H
DB 20H
DB 0FH
DB 00H
DB 04H
END
上面是從書上完完整整的超下來的!他的P1直接接上七節顯示器
動作是從0到9一直從複跑!但是我發現只要將上段的CALL DELAY
和INC R0這兩段程式互相交換位置,我的邏輯上檢查不出來有
錯誤,但實際的動作卻是錯的!不知道是不是我有哪裡有錯沒發
覺!麻煩各位先進幫我檢查一下!我用的8051是AT89S52這顆!麻煩
了!感恩~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.144.197
1F:推 wuzen:stack point init 了嗎? 03/06 12:36
2F:推 WolfLord:推樓上,第二行加上 MOV SP,#80H 03/07 00:35
3F:→ waynecone:重設堆疊後就OK了!但我程式那麼小怎麼也會有這樣的問題? 03/16 02:23