2016-08-19 8 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 

最初のジャンプはスキップされます。しかし、2番目のループに行きます。2番目のループはループを "再ロード"します。ここに無限ループがあります。

COUNT1はどのように初期化されたのか分かりませんが、問題はありません。私はそれをするだろう。

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

もちろん、Loop2と同じものです。コピー/貼り付けの代わりに2回呼び出すサブルーチンを実行することをお勧めします。条件は次の命令をスキップすることができ

非常に驚くべきアセンブラ:

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

関連する問題