当前位置: 代码迷 >> WinCE >> 学过单片机的请进,该怎么解决
  详细解决方案

学过单片机的请进,该怎么解决

热度:103   发布时间:2016-04-28 13:11:31.0
学过单片机的请进
求语句解析:
ORG 000H
LJMP MAIN
ORG 0030H
MAIN:MOV SP,#60H
LOP:MOV A,#7FH
LOOP:MOV P1,A
  MOV R7,#08H;重点求解
  LCALL DELAY
  RR A
  DJNZ R7,LOOP;重点求解
  MOV A,#0FEH
LOOP1:MOV P1,A
  MOV R7,#08H
  LCALL DELAY
  RL A
  DJNZ R7,LOOP1
SJMP LOP
DELAY:MOV R5,#10;重点求解对象,特别是延时程序时间的算法
DELAY1:MOV R6,#200
DELAY2:MOV R7,#123
DELAY3:DJNZ R7,DELAY3
  DJNZ R6,DELAY2
  DJNZ R5,DELAY1
  RET
END

------解决方案--------------------
LZ,你这是什么单片机?也要说说吧,不同的单片机的指令是不同的。
------解决方案--------------------
MOV R7,#08H;这个是把立即数08H放到寄存器R7中
DJNZ R7,LOOP;R7的值减一,然后判断是否等于0,不等于0则跳到LOOP
下面这一段是延时的子程序:(通过循环计数来达到延时效果,整个计数次数为:10*200*123次)
DELAY:MOV R5,#10;
DELAY1:MOV R6,#200
DELAY2:MOV R7,#123
DELAY3:DJNZ R7,DELAY3
DJNZ R6,DELAY2
DJNZ R5,DELAY1
RET

------解决方案--------------------
ORG 000H 程序入口地址000H
LJMP MAIN 跳转到MAIN代码段
ORG 0030H 程序地址0030H
MAIN:MOV SP,#60H MAIN:堆栈指针设为#60H
LOP:MOV A,#7FH LOP:立即数寻址,使A寄存器的值为60H
LOOP:MOV P1,A LOOP:将寄存器A的值给P1
MOV R7,#08H;重点求解 将立即数08H给R7寄存器
LCALL DELAY 调用DELAY延时代码
RR A 向右循环移动A寄存器的值
DJNZ R7,LOOP;重点求解 R7自减,如果不为零,则跳到LOOP继续执行,就是个循环操作
MOV A,#0FEH 将0FEH给A寄存器
LOOP1:MOV P1,A LOOP1:将A的值给P1
MOV R7,#08H 将08H给R7
LCALL DELAY 调用DELAY
RL A A向左移位
DJNZ R7,LOOP1 R7自减,不为零就继续LOOP1
SJMP LOP 跳转到LOP
DELAY:MOV R5,#10; DELAY:R5赋10
DELAY1:MOV R6,#200 DELAY1:R6赋200
DELAY2:MOV R7,#123 DELAY2: R7赋123
DELAY3:DJNZ R7,DELAY3 DELAY3:R7自减,不为零跳到DELAY3
DJNZ R6,DELAY2 R6自减,不为零跳到DELAY2
DJNZ R5,DELAY1 R5自减,不为零跳到DELAY1
RET 退出delay
END 程序结束
------解决方案--------------------
51单片机的程序,N年前用过
------解决方案--------------------
单位:指令周期
DELAY:MOV R5,#10; =t1
DELAY1:MOV R6,#200 =t2
DELAY2:MOV R7,#123 =t3
DELAY3:DJNZ R7,DELAY3 =t4
DJNZ R6,DELAY2 =t5
DJNZ R5,DELAY1 =t6
RET =t7

T=t1 + {t2 + [(t3 + 123*t4 + t5 )* 200] + t6 } * 10 + t7
  相关解决方案