2016-08-19 132 views
-1

这是我第一次尝试使用汇编进行编程,我无法弄清楚下面的代码有什么问题,因为它无法正常工作。使用PIC16F877闪烁LED - 汇编代码

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

*它不能正常工作*是不是一个有用的问题说明。 **具体如何**不这样做*正常工作*?我们无法看到您的屏幕或读出您的想法,而且我也没有碰到可以使用该汇编程序或PIC来尝试运行代码以找出您要求的内容。 –

+0

我在重复一下,但作为一般建议,您需要提供有关您的问题的更多详细信息。 “不工作”,并不真正有帮助。它是否组装?它在运行时有什么作用?有人可能会提供很少的信息,但您提供的信息越多,志愿者助手就会发现问题的最简单快速。此外,如果他们必须猜测,它会使帮助者失去活力。 – ElderBug

+0

对于一个应该眨眼的程序我会说:它什么都不做(https://moodle.sapidoc.ms.sapientia.ro/pluginfile.php/3008/mod_resource/content/1/PIC16%20Instruction%20Set.pdf ) –

回答

0

的问题是在双回路:当COUNT1为零

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

首先转到被跳过。但是,然后你去第二个循环,“重新加载”循环。你在这里有一个无限循环。

我不知道如何初始化COUNT1,但没关系。我会这样做。

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

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

非常suprising汇编有条件的地方可以跳过下一条指令:

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