0

私はマイクロプロセッシングのクラスを取っていますが、次のポートに移る前に 2 秒間ポートに値を保持するプログラムを書くのに苦労しています。

これがより理にかなっているのを助けることができる人はいますか?
NOP を使用することを考えましたが、それは少し非現実的であることに気付きました。ACALL DELAY を試しましたが、何らかの理由で未知のコマンドとしてプルアップされました。

私はこの時点で困惑しており、私が得ることができる助けをいただければ幸いです.

私は DS89C450 を 11 MHz のクロックで使用しています。教授に尋ねてみたところ、簡単なことで問題ないとのことでしたが、コードの読み取りと書き込みは私にとってまったく新しいものでした。二週間。私が本を見ると、ほとんど中国語で書かれているようで、意味を理解するのが難しいです. クラスメイトは私と同じように困惑しています.問題または私を正しい方向に導くことができるかもしれないもう少し洞察力を持っている人。

各ポートに指定された値をロードする必要があることはわかっていますが、問題はポートの切り替えにあり、2 秒の遅延が発生します。

私のプログラムは、この MOV P0、#33H MOV P1、#7FH MOV P2、B7H MOV P3、EFH のように見えるので、これらの 4 つのポートにこれらの値がロードされているので、到達するときに P1、P1-P2 などに移動するには P0 が必要です。 P3 の値は P0 に移動し、すべてをループする必要があります。プログラムが常に実行されるように、SJMPを使用して最初にループバックするつもりでした

これを行っている間、各値が各ポートに 2 秒間しか留まらない 2 秒間の遅延があります。

4

2 に答える 2

0

私はその特定のチップでこれを行ったことはありません (そして、それがサポートするアセンブリ構文を知りません) が、疑似コードのアプローチは次のようになります。

Load initial values into ports
Initialize counter with (delay in seconds * clock ticks per second) / (clock ticks in loop)
While counter != 0
    Decrement counter 
Swap port values:
    P3 -> temp, P2 -> P3, P1 -> P2, P0 -> P1, temp -> P0
Loop (4 times?)

構造に本当に必要なのはこれだけだと思います。8051 アセンブリに関する 10 分間の読み取りに基づくと、遅延ループは次のようになります。

          MOV A, b6h ; ~91 ticks/sec @ 11 ms/tick 
DELAY:    DEC A
          JNZ DELAY ; NOP-type delay loop
于 2010-10-21T19:24:30.463 に答える
0

私はPIC 16f84マイクロコントローラで同様のことをしました

遅延させるには、割り込みまたはループを使用する 2 つの方法があります

Instructions_per_secondがわかっているので、ループを使用して、必要な時間の必要な数の命令を生成できます。

このリンクは、ループインデックスを決定する方法を示しています(必要な命令数が必要な場合は、ネストされたループが必要になる場合があります.. PICでは、1秒の遅延を行うために100万回の命令を作成する必要がありました)

于 2010-10-21T19:49:21.557 に答える