【发布时间】:2019-02-24 02:11:23
【问题描述】:
此代码的目的是将打开的位闪烁 3 次,退出循环并关闭它们。目前代码似乎处于无限循环,计数为0后不退出循环
mov.b #0x00,&P2REN ;
mov.b #0xFF,&P2OUT ;
;mov.b #3, r5
.bss i,3
mov.w #3,&i ;
dec.w &i ; i--,
jnz for ; back to for loop
for_Done:
delayloop: dec.w r15 ;
jnz delayloop ;jump if not zero to delayloop
jmp for ;jump to the for
;jmp for_Done
【问题讨论】:
-
asm 没有“for 语句”。您只需在循环上有一个名为
for的标签。使底部的分支有条件,因此当某个计数器或其他任何条件达到某个条件时它会落空。 -
我已经更新了代码,我用 C 语言做了一个版本,它完成了我打算为这个汇编代码做的事情。我只想知道如何退出“for”标签。我知道这是有条件的,但是当 i = 0 时它仍然没有退出循环
-
您是否使用调试器单步验证它不会失败?稍后您有一个无条件的
jmp回到for:,所以很明显,如果您想在过去的某个地方继续执行,您需要跳过那个jmp。另外,为什么要将i保存在内存中,而不是在寄存器中? -
关于上拉电阻的 cmets 是错误的。请出示原始 C 代码。