这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于51程序问题

共14条 1/2 1 2 跳转至

关于51程序问题

助工
2014-04-21 14:20:54     打赏

  麻烦高手们看看如下程序,为什么最后一个LED亮的久一点     我想不明白

     ORG   0000H

START: 
       MOV   R2,#08H
  MOV   R3,#07H
  MOV   A,#01H
NEXT:
  MOV   P0,A
  ACALL DELAY
  RL    A
  DJNZ  R2,NEXT
NEXT1:
  RR    A
  MOV   P0,A
  ACALL DELAY
  DJNZ  R3, NEXT1
  AJMP  START
DELAY: MOV   R5,#0FFH
D1:   MOV   R6,#0FFH
D2:    MOV   R7,#02H
D3:   DJNZ  R7,D3
  DJNZ  R6,D2
       DJNZ  R5,D1
  RET   
  END  

专家
2014-04-21 16:26:46     打赏
2楼
ORG   0000H

START: 
  MOV   R2,#08H
  MOV   R3,#07H
  MOV   A,#01H
NEXT:
  MOV   P0,A
  ACALL DELAY
  RL    A
  DJNZ  R2,NEXT
NEXT1:
  RR    A
  MOV   P0,A
  ACALL DELAY
  DJNZ  R3, NEXT1
  AJMP  START
  
  
DELAY: 
  MOV   R5,#0FFH
D1:	   
  MOV   R6,#0FFH
D2:    
  MOV   R7,#02H
D3:	   
  DJNZ  R7,D3
  DJNZ  R6,D2
  DJNZ  R5,D1
  RET	   
  END  



高工
2014-04-21 16:27:17     打赏
3楼

重点是这样的
NEXT:
  MOV   P0,A       ;如果此时最后一个灯亮了
  ACALL DELAY
  RL    A             ;左移,但是没刷新显示
  DJNZ  R2,NEXT
NEXT1:
  RR    A           ;在上个基础上右移,
  MOV   P0,A     ;所以此时显示的还是最后一个灯亮
  ACALL DELAY

 

具体怎么去修改就交给楼主去思考了




助工
2014-04-21 17:33:54     打赏
4楼
我再想想,非常感谢啊

高工
2014-04-21 22:51:36     打赏
5楼

软件仿真,单步调试,看端口输出



助工
2014-04-22 15:24:59     打赏
6楼

你好!大哥,很感激您的解释

我用仿真,看到了现象,发现当A里面是80H(最后的灯亮)后,又经过了RL A 然后A里面就变回01H了

再经过RR A   A变到08H  在给到P0,所以最后的灯又亮了一次,才出现最后的灯亮的时间长些

但是我想不出如何修改这个现象,有什么指令能解决吗?求提示,谢谢!


院士
2014-04-22 22:44:32     打赏
7楼

都是汇编啊~~

你们好强啊~~


专家
2014-04-22 22:55:44     打赏
8楼
清除P0显示,然后再继续一步的移位操作

菜鸟
2014-04-26 18:40:12     打赏
9楼
其实我特别想帮你,但,我看不懂汇编

助工
2014-04-26 19:47:20     打赏
10楼

才刚开始学啊  很多都不懂

谢谢8楼的提示,我再试试看


共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]