作者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