使用PIC16F877闪烁LED - 汇编代码

时间:2016-08-19 12:25:47

标签: assembly microcontroller pic

这是我第一次尝试编译程序集时,我无法弄清楚下面的代码有什么问题,因为它无法正常工作。

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

1 个答案:

答案 0 :(得分:0)

问题出现在双循环中:

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

当COUNT1为零时,跳过第一个goto。但接着你进入第二个循环,“重新加载”循环。你在这里有一个无限循环。

我不知道如何初始化COUNT1,但这并不重要。我会这样做。

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

当然,Loop2也是如此。我甚至建议你做一个你调用两次而不是复制/粘贴的子程序。

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

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