TIMER0: PUSH ACC
push psw
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ 30H,RET0
MOV 30H,#14H
MOV R0,#7DH
ACALL ADD1
CJNE A,#60H,NOVER1
MOV A,#00H
MOV @R0,A
INC R0
ACALL ADD1
CJNE A,#60H,NOVER2
MOV A,#00H
MOV @R0,A
INC R0
ACALL ADD1
CJNE A,#24H,NOVER3
MOV 7FH,#00H
RET0: pop psw
POP ACC
RETI
NOVER1: MOV 7DH,A
pop psw
POP ACC
RETI
NOVER2: MOV 7EH,A
pop psw
POP ACC
RETI
NOVER3: MOV 7FH,A
pop psw
POP ACC
RETI
ADD1: MOV A,@R0
ADD A,#01H
DA A
RET
DISPLY:
MOV R4,#03H
MOV R5,#01H
MOV DPTR,#TAB
MOV R0,#7DH
LOOP1: MOV A,@R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
MOV P2,A
RL A
MOV R5,A
ACALL DELAY
MOV A,@R0
ANL A,#0F0H
SWAP A
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
MOV P2,A
RL A
MOV R5,A
ACALL DELAY
INC R0
DJNZ R4,LOOP1
RET
DELAY:
MOV R7,#20
D1: MOV R6,#20
DJNZ R6,$
DJNZ R7,D1
RET
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
如果用了,即使你不喂狗,在仿真器上调试的时候是没有问题的,但是到了你的板子上可能就有问题了。
还有你调试的时候用的是板子上的晶阵还是仿真头上的,看看你的晶体有没有脉冲,频率是不是标注的那么大?
问题可能不一定在你的程序上,P0口也不一定就要上拉,那是80C51的时候,现在有些是内部上拉的。你可以测试下,往P0口直接mov P0,#testdata 用万用表量下你的P0口输出是否正确就可以确认你的这个指令执行正确没?
建议:
对了,这位兄弟怎么老想着用汇编来编程呢?只要你的系统对时间执行时间要求不高,完全可以用C51 啊,开发效率高的多。Keil 开发也很方便快捷啊。不过在低版本的keil上有个汉字内码漏洞的,我用的那个keil 2 V7.02就有,你要用的话去老古那里下个补丁加上,要不你在开发液晶显示的系统时肯定会有某些汉字显示出来是乱码。当然这个漏洞在高版本的Keil上已经没有了。
另让你在P0口放上拉电阻,你怎么不试.
好好看看51关于P0的描述.
你这样写程序,P0口应有上拉电阻.否则应该用MOVX @DPTR,A
可否简化一下程序,你用了几次pop psw; pop acc
TIMER0:
PUSH ACC
push psw
setb RS0
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ 30H,RET0
MOV 30H,#14H
MOV R0,#7DH
ACALL ADD1
CJNE A,#60H,ret0
clr a
MOV @R0,A
INC R0
ACALL ADD1
CJNE A,#60H,ret0
clr a
MOV @R0,A
INC R0
ACALL ADD1
CJNE A,#24H,ret0
MOV 7FH,#00H
RET0: pop psw
POP ACC
RETI
ADD1: MOV A,@R0
ADD A,#01H
DA A
mov @r0,a
RET