keil使用汇编程序问题不断,神收了我吧

count equ 30h
gewei equ 31h
shiwei equ 32h
org 0000h
sjmp start
org 0030h
start: mov sp,#60h
mov p0,#0ffh
mov p2,#0ffh
mov count,#0
mov gewei,#0
mov shiwei,#0
mov dptr,#tab
main: call process
call display
sjmp main
process:inc count
mov a,count
cjne a,#100,jixu
mov count,#0
jixu:mov a,count
mov b,#10
div ab
mov shiwei,a
mov gewei,b
ret
display:mov a,shiwei
movc a,@a+dptr
mov p0,a
clr p2.7
call delay
setb p2.7
mov a,gewei
movc a,@a+dptr
mov p0,a
clr p2.6
call delay
setb p2.6
ret
delay: mov r0,#250
d1: mov r1,#250
d2: djnz r0,d2
djnz r1,d1
ret
tab: db 0ch,0f9h,0a4h,0b0h,99h
db 92h,82h,0f8h,80h,90h
end
编译时出现如下显示,但还是可以产生hex文件,但下载到单片机后,单片机显示全乱了,如下图!!!!求大神解答,到底是程序问题还是软件问题,解决后要多少分给多少!!!

第1个回答  2014-09-24
STARTUP.A51,应该删除。

另外,你的这个板子,买来时,没有带有一些好用的程序吗?追问

STARTUP.A51是产生hex文件前删还是产生后删 ,有好的c 程序,但我想练练汇编,谢谢

追答

删除再编译。

看你的照片,好像是程序、硬件,根本就不配套。

把 C 程序,显示部分,显示出来,改成汇编,即可。

追问

删除再编译就不能编译了,之前试过的

追答

什么叫不能编译呀?
编译的按钮,按不下去吗?

之前就告诉过你,用汇编语言编程,STARTUP.A51,是无用的。

你显示的错误,就是因为这个文件。
听人劝,吃饱饭,不听,就等《神收了我吧》。

追问

之前以为在文件里面直接删除它 后来发现是在目录下 删掉后就没问题了 谢谢了!但程序还是有问题 改了一处延时为
delay: mov r0,#250
d2: mov r1,#250
d1: djnz r1,d1
djnz r0,d1
(这是书上的)显示动感强了一点但还是乱的,程序好像也是和硬件匹配的,因为我看了c语言正确的程序,端口赋值都是一样的,能不能再帮忙看一下,谢谢了

追答

显示动感强了一点但还是乱的,程序好像也是和硬件匹配的,
因为我看了c语言正确的程序,端口赋值都是一样的,
-----------
看你给出的照片,并没有显示出来数字。
只是有一些反的《∟》符号而已。
----
你的程序,显示一遍,就加一次一,加的,也太快了。
应该显示几十~几百次,才加一次一。
----
你的程序,怎么能用 R0 R1 来延时呢?

R0 R1,不是应该留着,用于寄存器间接寻址吗?
----
看看我的百度空间吧,有好多的例程。

追问

无论怎么样,还是谢谢你

追答

按照你以前的:
http://zhidao.baidu.com/question/1830855903686380100.html
你不是说已经可以显示了吗?

难道,还是没有显示出来?

动态显示,是各个位,轮流发光一小段时间。
你现在的程序,并没有令每一位都延时。

你的程序,显示一遍,就加一次一,加的,也太快了。
应该显示几十~几百次,才加一次一。
------
看了你的几个问题,关键是你没有弄出一个正确的显示程序。

现在,你用的是共阴的段码。
但是,你在这个问题中,用的共阳的段码:
http://zhidao.baidu.com/question/1366521488006645339.html

另外,你有两次输出,一个是输出段码、另一次是输出位码。
但是,你在这个问题中,分别输出了十位和个位的段码,却没有输出位码:
http://zhidao.baidu.com/question/1366521488006645339.html

你买来的这个板子,原来没有带来一些程序吗?

自己编,或者照着书编,如果与电路不符,都是不行的。

本回答被提问者和网友采纳
相似回答