导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[原创]:高手请进,帮我看一程序!!!!!!!![aya]

 *第35378篇: [原创]:高手请进,帮我看一程序!!!!!!!!

  
楼 主:aya 2005年10月30日21:30
 [原创]:高手请进,帮我看一程序!!!!!!!!
这道程序调试正确,但运行不出结果,请帮我看一下,thanks! 
ORG 0000H    ;电脑时钟显示
 AJMP MAIN
 ORG 000BH
 AJMP TIMER0
 ORG 0030H
MAIN: MOV 30H,#14H ;20次
 MOV 7FH,#00H ;时
 MOV 7EH,#00H ;分
 MOV 7DH,#00H ;秒
 MOV TMOD,#01H
 MOV TH0,#3CH
 MOV TL0,#0B0H
 SETB EA
 SETB ET0
 SETB TR0
LOOP: ACALL DISPLY
 AJMP LOOP

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

  
2楼:虚子心 2005年10月31日22:17
 你用的是什么型号的51?是LED显示吧.
你用的是什么型号的51?是LED显示吧.
从程序上看,你这样写程序,P0口应有上拉电阻.否则应该用MOVX @DPTR,A
来完成输出.最好发张图,帮你分析分析.
  
3楼:aya 2005年11月5日10:16
 我用的是82c51 和LED显示,动态扫
我用的是82c51 和LED显示,动态扫描显示时间,共用了六个LED, 从左到右依此为时(十位和个位)、分(十位和个位)、秒(十位和个位),把时间显示值送到P0口(接LED),P2口对六个LED进行片进行片选,应该程序思路的对的,但就是没结果!!!
  
4楼:Houseivan 2005年11月5日12:43
 你的没结果是什么现象?一点都没效果吗?
你的没结果是什么现象?一点都没效果吗?
最好用示波器看看有没有一直在复位?
比如你用了看门狗没有?

如果用了,即使你不喂狗,在仿真器上调试的时候是没有问题的,但是到了你的板子上可能就有问题了。

还有你调试的时候用的是板子上的晶阵还是仿真头上的,看看你的晶体有没有脉冲,频率是不是标注的那么大?

问题可能不一定在你的程序上,P0口也不一定就要上拉,那是80C51的时候,现在有些是内部上拉的。你可以测试下,往P0口直接mov P0,#testdata   用万用表量下你的P0口输出是否正确就可以确认你的这个指令执行正确没?

建议:
对了,这位兄弟怎么老想着用汇编来编程呢?只要你的系统对时间执行时间要求不高,完全可以用C51 啊,开发效率高的多。Keil 开发也很方便快捷啊。不过在低版本的keil上有个汉字内码漏洞的,我用的那个keil 2 V7.02就有,你要用的话去老古那里下个补丁加上,要不你在开发液晶显示的系统时肯定会有某些汉字显示出来是乱码。当然这个漏洞在高版本的Keil上已经没有了。

  
5楼:虚子心 2005年11月5日15:49
 [size=4][color=#DC14
R0使用冲突
在主程序中使用了R0,中断中又使用R0.

另让你在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



>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:哪位大侠有 Hi-Lo 的 V'Nice-51 仿真

[下一篇主题]:请教一个有关keilC的问题