登录
首页 单片机论坛
回帖 发帖
正文

主题:代码中的错误找不出来

点击:970 回复:2

ORG 000H
          LJMP MAIN
  ORG  0003H
  LJMP TT0
  ORG 0030H
MAIN:   MOV SP,#60H
          MOV IE,#81H
  MOV IP,#01H
  MOV TCON,#00H
ZUOYI1:   MOV R3,#8
  MOV A,#0FEH
ZUOYI:   MOV P1,A
  RL A
  LCALL DISPLAY
  DJNZ R3,ZUOYI
  RR A
      MOV R2,#8
YOUYI:     MOV P1,A
  RR A
  LCALL DISPLAY
  DJNZ R2, YOUYI
  LJMP ZUOYI1
TT0:   PUSH ACC
          PUSH PSW
  MOV A,#11H
  MOV R7,#5
SHANSHUO:  MOV P1,A
          LCALL DISPLAY
  LCALL SHANSHUO1
SHANSHUO1: MOV A,#00H
          MOV P1,A
          LCALL DISPLAY
  DJNZ R7, SHANSHUO
  POP PSW
  POP ACC
  RETI
DISPLAY:   MOV R4,#4
DE1:   LCALL DISPLAY1
  DJNZ R4,DE1
  RET
DISPLAY1:  MOV R5,#00
  MOV R6,#00
DE2:   DJNZ R6,$
  DJNZ R5,DE2
  RET
  END
这段代码要表达的意思是P1口的8个发光二极管左移,右移,有中断时8个二极管闪烁共10次
现在运行时能左移右移但不能闪烁,一直亮直到延时时间到
这中间的TT0写成下面这样中断之后P1口发光二极管任不能闪烁
TT0:   PUSH ACC
          PUSH PSW
  MOV A,#11H
  MOV R7,#10
SHANSHUO:  MOV P1,A
          CPL A
          LCALL DISPLAY
  DJNZ R7, SHANSHUO
  POP PSW
  POP ACC
  RETI
09-05-07 22:50

引用 516438919 在 2009-5-7 22:50:29 发言【内容省略】

在以上这一段里,第一: LCALL SHANSHUO1这句,既然长调用子程序,那么此子程序结束必须有个RET调用返回指令.你的SHANSHUO1子程序的返回指令在哪?
                    第二:"MOV A,#11H"也不知道你写这个语句的目的是什么?如果想使得闪烁.也应该是先00H,后0FFH.何来个#11H?,而且为何要写入A?直接写道P1不是可以的吗,想延长程序的运行时间吗?                  
                  第三:"MOV R7,#5"你这句的目的想闪烁5次吗?若写入#5的话那么就代表输出灭5次,亮5次.照理闪烁10次,意思照理是灭10次,亮10次,而应该写:"MOV R7,#10"
总括后把你你的中断程序改成一下的程序,即可实现命题要求.你其他写的没错的.
 
TT0:     PUSH ACC
          PUSH PSW
    MOV R7,#5
SHANSHUO:   MOV P1,#00H
          LCALL DISPLAY
SHANSHUO1: MOV P1,#0ffH
          LCALL DISPLAY
    DJNZ R7, SHANSHUO
    POP PSW
    POP ACC
    RETI
09-05-08 08:54
谢谢您!
09-05-08 12:56

工控新闻

更多新闻资讯