打印

数码管显示问题

[复制链接]
2119|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
houcs|  楼主 | 2013-12-18 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在问题是,上电能显示654321,可当按下P1.3口接的按键时,6 个数码管都不会亮了,程序哪里出了问题
程序目的:上电时数码管显示654321,每次按下P1.3口按键时
对31H中的数据加一,加到 10时,31H中清0并对下一个地址
(32H)中的数据加1,依次类推
沙发
liuzaiy| | 2013-12-18 23:05 | 只看该作者
程序?

使用特权

评论回复
板凳
houcs|  楼主 | 2013-12-18 23:07 | 只看该作者
org 0000h
jmp start
org 0003h
reti
org 000bh
reti
org 0013h
jmp wzd1
org 001bh
reti
org 0023h
reti


wzd1: push psw      ;外中断入口
         push acc
         clr ea
         clr ex1
         jnb p1.3,key3    1.3为0时转KEY3
wzdfh:pop acc          ;外中断返回
         pop psw
         setb ea
         setb ex1
        reti
key3:call delay10ms
       jb p1.3,wzdfh
      l1: jnb p1.3,$
         inc 31h           1.3松开时31H加1
       mov a,#10
       cjne a,31h,wzdfh     ;31H中不等于10中断返回
       clr a
       mov 31h,a             ;31H中的数据清0并对下一地址中的数据加一
       inc 32h
       mov a,#10
       cjne a,32h,wzdfh
        clr a
       mov 32h,a
       inc 33h
       mov a,#10
       cjne a,33h,wzdfh
            clr a
       mov 33h,a
       inc 34h
       mov a,#10
       cjne a,34h,wzdfh
            clr a
       mov 34h,a
       inc 35h
       mov a,#10
       cjne a,35h,wzdfh
            clr a
       mov 35h,a
       inc 36h
       mov a,#10
       cjne a,36h,wzdfh
       clr a
       mov 36h,a
       jmp wzdfh

start:mov 31h,#1
         mov 32h,#2
         mov 33h,#3
         mov 34h,#4
         mov 35h,#5
         mov 36h,#6
         clr p1.5
         setb ea
          setb ex1
start1:call display
         jmp start1
display:mov r1,#31h
     mov r2,#00000001
play:  mov p0,#0ffh
         mov a,r2
         mov p2,a
         mov a,@r1
         mov dptr,#tab
         movc a,@a+dptr
         mov p0,a
         call delay1ms
         inc r1
         mov a,p2
         jb acc.5,endout
         rl a
         mov r2,a
         mov p2,#0h
         jmp play
endout:mov p0,#0ffh
         mov p2,#0
         ret
delay1ms:mov r3,#2
     d1:   mov r4,#250
     d2:   djnz r4,$
           djnz r3,d1
           ret
delay10ms: call play   ;10ms子程序,调用一次显示子程序约6ms,调两次约12ms
             call play
           ret

tab:db   48h,0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h
end

使用特权

评论回复
地板
yinxiangh| | 2013-12-18 23:07 | 只看该作者
楼上的是汇编高手

使用特权

评论回复
5
pangb| | 2013-12-18 23:08 | 只看该作者
程序应该显示一下就没有了.
中断方式.

使用特权

评论回复
6
chenjunt| | 2013-12-18 23:09 | 只看该作者
将SP值该一下.

使用特权

评论回复
7
houcs|  楼主 | 2013-12-18 23:10 | 只看该作者
为什么呢?SP值怎么改

使用特权

评论回复
8
morrisk| | 2013-12-18 23:10 | 只看该作者
USB2.0规范,最大输出电流500mA,工作电压4.75V~5.25V。

使用特权

评论回复
9
zyf部长| | 2013-12-18 23:12 | 只看该作者
用软件仿真一下,関件\是否能进入中断测试,Sp初为07,加一语句mov sp =70h

使用特权

评论回复
10
zyf部长| | 2013-12-18 23:12 | 只看该作者
给堆栈入口地址。60h
把按键抬起判断放到最后
给你个建议以后看C语言写汇编
这样有助于你的汇编

使用特权

评论回复
11
小小猫咪| | 2013-12-18 23:14 | 只看该作者
建议楼主学C语言,方便多了。
楼主主程序循环是:
start1:call display
         jmp start1
play是display子程序的一部分“
display:mov r1,#31h
     mov r2,#00000001
play:  mov p0,#0ffh
         mov a,r2
...........

中断时调用了delay10ms:
delay10ms: call play   ;10ms子程序,调用一次显示子程序约6ms,调两次约12ms
             call play
           ret
即在中断时又调用了主程序的一部分,导致了错误!

使用特权

评论回复
12
小小猫咪| | 2013-12-18 23:14 | 只看该作者
楼主如果对汇编语言情有独钟、一往情深。建议楼主用宏定义定义变量。

使用特权

评论回复
13
kangzj| | 2013-12-18 23:15 | 只看该作者
31H这样太原始风味。程序里用了许多这样定义,时间久了,或者别人接手维护升级非常痛苦。

使用特权

评论回复
14
kangzj| | 2013-12-18 23:15 | 只看该作者
除非是象棋大师,超强的**和逻辑能力!

使用特权

评论回复
15
司徒老鹰| | 2013-12-18 23:17 | 只看该作者
看起名字用中文拼音,应该是半路出家的高僧~
佩服

使用特权

评论回复
16
supernan| | 2013-12-18 23:17 | 只看该作者
汇编看得头痛

使用特权

评论回复
17
fengdingkusong| | 2013-12-19 00:56 | 只看该作者
我勒个去,汇编啊

使用特权

评论回复
18
pang3dsa| | 2013-12-19 12:59 | 只看该作者
      l1: jnb p1.3,$      死等按键松开,不松开跳不过这条指令。
         inc 31h           1.3松开时31H加1
       mov a,#10

如上面注释,不松开按键,所有程序都停下等待。
所以扫描数码管的时间都没有了。
除非还有别的错误,不然松开按键应该就好了。

使用特权

评论回复
19
wl4013729| | 2013-12-19 20:48 | 只看该作者
楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的楼上的是个大神

使用特权

评论回复
20
加油吧小鱼儿| | 2013-12-19 21:58 | 只看该作者
中断没有处理好!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝