永发信息网

帮我翻一下好吗?比如说第一句是程序起始地址,从0开始存放,后面我就不懂了

答案:2  悬赏:40  手机版
解决时间 2021-02-05 10:01
  • 提问者网友:遮云壑
  • 2021-02-05 03:33
ORG 0000H

LJMP START

ORG 0100H

START:

MOV SP,#50H

MOV R7,#11111110B

MOV A,R7

MOV P2,A

SETB C

LOOP:

MOV A,R7

RLC A

MOV P2,A

MOV R7,A

LCALL DELAY

SJMP LOOP

DELAY:

MOV R0,#0FFH

LP1:

MOV R1,#0FFH

LP0: DJNZ R1,LP0

DJNZ R0,LP1

RET

END
能帮我翻译下这个单片机汇编语言吗?
最佳答案
  • 五星知识达人网友:执傲
  • 2021-02-05 04:09
这貌似是个跑马灯

LJMP Start 让程序跳到真正的存放代码的地方,即 0100H

然后做了一些初始化工作,比如

MOV SP,#50H 把栈顶指针指向了 50H

MOV R7,#11111110H
MOV A,R7
MOV P2,A
这三句其实就是利用 A 做了个二传手把 11111110 送到了 P2 口,如果 P2 口连着灯的话,一般是低电平把灯点亮,所以最后一根线 P2.0 连着的等就会亮,其他灭,因为 P2.0 是 0,其他都是 1

SETB C 把Cy 置为1,用于和后边的RLC 配合

RLC A 带Cy循环左移(Rotate Left With Cy),你就可以想象成 P2 口和 Cy 位构成的 9 个二进制位构成了一个圈, 0 在圈中依次左移,本来是 P2.0 ,然后是 P2.1 。。。这样,亮着的灯就会出现左移的现象,但由于特别快,所以由于有视觉残留效应就会看起来都是亮的,怎么解决呢?亮起来延时一小会就好了,这时候其他灯就会灭了,所以后边的

LCALL DELAY 就是调用了一段延时子程序

DELAY 子程序其实也很简单,就是一个嵌套的循环,外层循环 FF 次,内层也是 FF 次,利用执行 DJNZ 指令耗费的时间配合循环来延长总的时间。

DJNZ 指令可以这样理解: Decrease Jump While Not Zero ,就是先减一,然后判断是否为 0 ,不为 0 则 JUMP 跳转。
全部回答
  • 1楼网友:封刀令
  • 2021-02-05 05:09
还行
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯