使用 PIC16F877 闪烁 LED - 汇编代码

Blinking LED with a PIC16F877 - Assembly Code

这是我第一次尝试用汇编编程,我无法弄清楚下面这段代码有什么问题,因为它不能正常工作。

include "P16F877.INC"

STATUS  equ 03h
TRISB   equ 86h
PORTB   equ 06h
COUNT1  equ 20h
COUNT2  equ 21h


        bsf     STATUS,5
        bcf     TRISB,0
        bcf     STATUS,5

Start   bsf     PORTB,0

Loop1   decfsz  COUNT1,1
        goto    Loop1
        decfsz  COUNT1,1
        goto    Loop1

        bcf     PORTB,0

Loop2   decfsz  COUNT2,1
        goto    Loop2
        decfsz  COUNT2,1
        goto    Loop2

        goto    Start


end

问题出在双循环中:

Loop1   decfsz  COUNT1,1
        goto    Loop1
        decfsz  COUNT1,1
        goto    Loop1

当 COUNT1 为零时,将跳过第一个转到。但是随后您进入第二个循环,即 "reloads" 循环。你这里有一个无限循环。

不知道COUNT1是怎么初始化的,不过没关系。我会那样做。

Loop1a  decfsz  COUNT1,1
        goto    Loop1a
        ; possibly reload COUNT1 with some value
Loop1b
        decfsz  COUNT1,1
        goto    Loop1b

当然,Loop2 也是如此。我什至建议你做一个你调用两次的子程序而不是 copying/pasting.

非常令人惊讶的汇编程序,其中条件可以跳过下一条指令:

https://moodle.sapidoc.ms.sapientia.ro/pluginfile.php/3008/mod_resource/content/1/PIC16%20Instruction%20Set.pdf