一個不知道是89S52硬體本身還是程式有錯的問題?

看板ASM作者 (wayne)時間15年前 (2009/03/06 02:13), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
最近在練習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

03/06 12:36, , 1F
stack point init 了嗎?
03/06 12:36, 1F

03/07 00:35, , 2F
推樓上,第二行加上 MOV SP,#80H
03/07 00:35, 2F

03/16 02:23, , 3F
重設堆疊後就OK了!但我程式那麼小怎麼也會有這樣的問題?
03/16 02:23, 3F
文章代碼(AID): #19i1Onhk (ASM)